In einem kürzlich durchgeführten Projekt musste ich die neuen Funktionen von Java Websocket nutzen, also lernte ich es und hatte das Gefühl, dass diese Technologie ziemlich Spaß machte. Ich wusste sofort, wie der Online -Kundendienst auf der Webseite fertig war.
Schauen wir uns zuerst das Bild an:
Die Echtzeitkommunikation zwischen mehreren Kunden wird realisiert.
Schauen wir uns das Code -Projektstrukturdiagramm an: Es ist sehr einfach, nur 1 Klasse und 1 Seite
Schauen Sie sich dann den spezifischen Code an
Schauen Sie sich zuerst den Backend -Code an
Paket com.main; import java.io.ioException; import java.util.concurrent Seine Funktion besteht hauptsächlich darin, die aktuelle Klasse als WebSocket -Serverseite zu definieren. * Der Annotationswert wird verwendet, um die Verbindung des Benutzers mit der URL -Adresse des Terminalzugriffs anzuhören. Der Client kann über diese URL*/@Serverendpoint ("/WebSocket") eine Verbindung zum WebSocket -Server herstellen. Es sollte so ausgelegt sein, dass er mit Thread-Sicherheit ist. private static int onlinecount = 0; // Der Thread-Safe-Set des gleichzeitigen Pakets wird verwendet, um das entsprechende MyWebocket-Objekt jedes Clients zu speichern. Um zu erkennen, dass der Server mit einem einzelnen Client kommuniziert, können Sie mit MAP speichern, wobei der Schlüssel den Benutzer privat staticOnWriteArraySet <H5ServletServerSocket> WebSocketSet = NewonWriteArraySet <H5ServletServerSocket> () identifizieren kann. // Eine Verbindungssitzung mit einem bestimmten Client muss Daten an die private Sitzung der Kunden senden. /** * Methode zum erfolgreichen Aufruf von Verbindungsanträgen * * @Param Session * Optionale Parameter. Die Sitzung ist eine Verbindungssitzung mit einem Kunden und muss Daten über ihn über ihn senden*/ @onopen public void onopen (Sitzungssitzung) {this.Session = Sitzung; WebSocketSet.Add (this); // addonlineCount () in set; // 1 Online -Number -System hinzufügen. } / *** Methode zum Verbinden von Schließanrufen* / @onclose public void onclose () {WebSocketset.remove (this); // subonlineCount () aus dem Set entfernen; // subonlineCount () aus dem Set löschen; // Online -Nummer löschen nach 1 Online -Nummer System.out.println ("Es wird eine Verbindung geschlossen! Die aktuelle Anzahl der Online -Personen ist" + GetonlineCount ()); } / *** Methode, die nach dem Empfangen der Client -Nachricht** @param meldung* Nachricht vom Client gesendet wurde* @Param Session* Optionale Parameter* / @onMessage public void onMessage (String -Nachricht, Sitzungssitzung) {System.out.println ("Nachricht vom Client:" + Nachricht); // Bulk -Nachricht für (H5ServletServerSocket -Element: WebSocketSet) {try {item.sendMessage (message); } catch (ioException e) {e.printstacktrace (); weitermachen; }}}} / ** * aufgerufen, wenn ein Fehler auftritt ERROR.PRINTSTACKTRACE (); } /*** Diese Methode unterscheidet sich von den oben genannten Methoden. Es gibt keine Annotation, es handelt sich um eine Methode, die entsprechend Ihren Anforderungen hinzugefügt wird. * * @param meldung * @throws ioException */ public void sendMessage (String meldung) löscht ioException {this.Session.getBasicremote (). SendText (Message); // this.session.getasyncremote (). sendText (meldung); } public static synchronisierte int getonlineCount () {return onlineCount; } public static synchronisierte void addonlineCount () {H5ServletServerSocket.onlineCount ++; } public static synchronisierte void subonlineCount () {H5ServletServersocket.onlineCount--; }}Als nächstes kommt der Front-End-Seitencode:
<%@ page Language = "java" import = "java.util. String basepath = request.getScheme () + ": //" + request.getServername () + ":" + request.getServerport () + path + "/";%> <! DocType html> <html> <head> <base href = "<%= basepath%> </title> </title> </title> </title> </title> </title> </title> </title> </title id = "message" style = "color: blau"> 【Status】 </div> <br/> Spitzname <Eingabe id = "username" type = "text" erforderlich = "Erforderlich"/> <br> Inhalt <input id = "text" type "text"/> <br/> <button onclick = "Send ()"> Senden </button> button> button upclick = "button> button type = "text/javaScript"> var webocket = null; // beurteilen, ob der aktuelle Browser WebSocket if ('WebSocket' im Fenster) unterstützt {WebSocket = new WebSocket ("WS: //10.1.1.106: 8080/Socket/WebSocket"); } else {alert ('webSocket nicht unterstützt!')} // Rückrufmethode für Fehler in der Verbindung webocket.onerror = function () {setMessageInNerHtml ("Fehler"); }; // Rückrufmethode für eine erfolgreiche Verbindung webocket.onopen = function (Ereignis) {setMessageInnerhtml ("Chat -Raum aktiviert"); } // Rückrufmethode zum Empfangen von message webSocket.onmessage = function () {setMessageInnerhtml (Ereignis.Data); } // Verbindungs Closed Callback -Methode WebSocket.onclose = function () {setMessageInnerhtml ("Chatroom Close"); } // Hören Sie sich das Fensterschließereignis an. Wenn das Fenster geschlossen ist, schließen Sie aktiv die WebSocket -Verbindung, um zu verhindern, dass das Fenster schließt, bevor die Verbindung getrennt wird, und die Serverseite wird Ausnahmen auswirken. window.onbeforeUload = function () {WebSocket.close (); } // Die Nachricht auf der Webseitenfunktion setMessageInNerHtml (InnerHtml) {document.getElementById ('message'). InnerHtml + = InnerHtml + '<br/>' '; } // Schließen Sie die Verbindungsfunktion CloseWebSocket () {WebSocket.close (); } // Die Nachrichtenfunktion senden send () {var userername = document.getElementById ('Benutzername'). Wert; var message = document.getElementById ('text'). Wert; var msg = "【" + username + "] sprechen:" + message webocket.send (msg); } </script> </html>Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.