Dans un projet récent, j'avais besoin d'utiliser les nouvelles fonctionnalités de Java Websocket, donc je l'ai appris et j'ai senti que cette technologie était assez amusante. Je savais instantanément comment le service client en ligne sur la page Web était terminé.
Regardons d'abord l'image:
La communication en temps réel entre plusieurs clients est réalisée.
Examinons le diagramme de structure du projet de code: c'est très simple, juste 1 classe et 1 page
Puis regardez le code spécifique
Regardez d'abord le code backend
package com.main; importer java.io.ioException; import java.util.concurrent.copyonwritearrayset; importer javax.websocket. *; import javax.websocket.server.serverendpoint; / ** * @serverendpoint annotation est une annotation à lettère de classe. Sa fonction consiste principalement à définir la classe actuelle comme un côté serveur WebSocket. * La valeur d'annotation sera utilisée pour écouter la connexion de l'utilisateur à l'adresse URL d'accès au terminal. Le client peut se connecter à côté serveur WebSocket via cette classe publique URL * / @ serveRendPoint ("/ WebSocket") H5ServletSerVersocket {// Variables statiques utilisées pour enregistrer le nombre actuel de connexions en ligne. Il doit être conçu pour être fileté. Int statique privé inlineCount = 0; // L'ensemble de filetage du package simultané est utilisé pour stocker l'objet MyWebSocket correspondant de chaque client. Pour réaliser que le serveur communique avec un seul client, vous pouvez utiliser MAP pour le stocker, où la clé peut identifier l'utilisateur Static CopyOnWriteArraySet <h5ServletServerSocket> WebSocketSet = new CopyOnwriteArraySet <H5ServerSerVersocket> (); // Une session de connexion avec un certain client doit envoyer des données à la session privée du client; / ** * Méthode pour réussir l'appel de la connexion Connexion * * @param session * Paramètres facultatifs. La session est une session de connexion avec un client, et elle doit envoyer des données au client via l'informatique * / @onopen public void onopen (session session) {this.Session = session; WebSocketEt.add (this); // addOnlineCount () dans set; // Ajouter 1 numéro de numéro en ligne.out.println ("Il existe une nouvelle connexion à rejoindre! Le nombre actuel de personnes en ligne est" + getOnlineCount ()); }! // Supprimer SubonlineCount () de Set; // delete SubonlineCount () de set; // Supprimer le numéro en ligne par 1 numéro en ligne System.out.println ("Il y a une connexion fermée! Le nombre actuel de personnes en ligne est" + getOnlineCount ()); }! // Message en masse pour (h5ServletSerVersocket Item: WebsocketEt) {try {item.sendMessage (message); } catch (ioException e) {e.printStackTrace (); continuer; }}}} / ** * Appelé lorsqu'une erreur se produit * * @param session * @param error * / @onerror public void onError (session session, errorable) {System.out.println ("erreur s'est produite"); error.printStackTrace (); } / ** * Cette méthode est différente des méthodes ci-dessus. Il n'y a pas d'annotation, c'est une méthode ajoutée en fonction de vos besoins. * * @param Message * @throws ioException * / public void sendMessage (String Message) lève ioException {this.Session.getBasicRemote (). SendText (message); // this.Session.getasynCremote (). SendText (message); } public static synchronisé int getOnlineCount () {return onlineCount; } public static synchronisé void addonlineCount () {h5ServletServersocket.onlineCount ++; } public static synchronisé void SubonlineCount () {H5ServletServersocket.onlineCount--; }}Ensuite, le code de page frontal:
<% @ page langage = "java" import = "java.util. *" pageencoding = "utf-8"%> <% String path = request.getContextPath (); String basepath = request.getscheme () + ": //" + request.getServerName () + ":" + request.getServerport () + path + "/";;%> <! Doctype html> <html> <adread> <base href = "<% = Basepath%>"> <titre> My Webocket </tape> id = "message" style = "couleur: bleu"> 【statut】 </ div> <br /> nausé nom <entrée id = "username" type = "text" requis = "requis" /> <br> contenu <entrée id = "text" type = "Text" /> <br /> <bouton onclick = "send ()"> </ bouton> <bouton onClick = "Closewebsocket ()"> </ / bouton> <bouton OnClick = " type = "text / javascript"> var Websocket = null; // juge si le navigateur actuel prend en charge WebSocket if ('WebSocket' dans la fenêtre) {WebSocket = new WebSocket ("ws: //10.1.1.106: 8080 / socket / WebSocket"); } else {alert ('WebSocket non pris en charge!')} // Méthode de rappel pour les erreurs dans la connexion WebSocket.onerror = function () {setMessageInnerHtml ("error"); }; // Méthode de rappel pour une connexion réussie WebSocket.onOpen = fonction (événement) {setMessageInnerHtml ("Chat Room activé"); } // Méthode de rappel pour recevoir un message WebSocket.Onmesage = function () {setMessageInnerHtml (event.data); } // Méthode de rappel fermé de connexion Websocket.OnClose = function () {setMessageInnerHtml ("Chat Room Close"); } // Écoutez l'événement de clôture de la fenêtre. Lorsque la fenêtre est fermée, fermez activement la connexion WebSocket pour empêcher la fermeture de la fenêtre avant la déconnexion de la connexion et le côté serveur lancera des exceptions. window.onbeforeUnload = function () {Websocket.close (); } // Affichez le message sur la fonction Web SetMessageInnerHtml (innerHTML) {document.getElementById ('message'). InnerHtml + = innerHtml + '<br/>'; } // Fermez la fonction de connexion ClosewWebSocket () {Websocket.close (); } // Envoi de la fonction de message Send () {var username = document.getElementByid ('username'). Valeur; var message = document.getElementById ('texte'). valeur; var msg = "【" + nom d'utilisateur + "] Speak:" + message Websocket.Send (msg); } </ script> </html>Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.