Ein WebSocket-Echtzeit-Push-Beispiel, das basierend auf dem Spring Framework geschrieben wurde, ist der spezifische Inhalt wie folgt
Schritt 1: Erstellen Sie selbst ein SpringMVC -Projekt, es ist sehr einfach, bei Baidu online erhältlich. Fügen Sie die folgende POM -Datei hinzu:
<!-WebSocket-> <Depopentcy> <gruppe. <version> 4.2.4.Release </Version> </abhängig>
Meine Frühlingsversion ist 4.2.4, also ist WebSocket auch 4.2.4; Es ist am besten, dasselbe wie die Frühlingsversion zu behalten
Schritt 2: Schreiben Sie einen Nachrichtenprozessor
/** * Projektname: Springrabbitmq * Dateiname: myMessageHandler.java * Paketname: com.zsy.websocket * Datum: 31. Januar 2018 um 11:10:03 Uhr * Copyright (c) 2018, Zhaoshouyun Alle Rechte vorbehalten. * */ package com.zsy.websocket; importieren java.io.ioException; import Java.util.map; Java.util.set importieren; Import Java.util.Concurrent.Concurrenthashmap; import org.apache.commons.lang3.stringutils; import org.springframework.web.socket.closestatus; import org.springframework.web.socket.textMessage; import org.springframework.web.socket.websockethandler; import org.springframework.web.socket.websocketmessage; import org.springframework.web.socket.websocketSession; /** * KlasseName: MyMessageHandler * Funktion: Implementieren Sie die WebScoket -Schnittstelle * Datum: 31. Januar 2018 um 11:10:03 Uhr * @Author Zhaoshouyun * @Version * @Since Jdk 1.7 */public class myMessageHandler implements webSockeScer {// User Key Public statat statat usw. / *** UserMap: Speichern von Benutzerverbindungs -Webcoket -Informationen* @Since JDK 1.7*/ Private Final Static Map <String, WebSocketSession> UsMap; static {usermap = new ConcurrentHasMap <String, WebSocketSession> (30); } / *** Diese Methode wird beim Schließen des Websocket* @see org.springFramework.web.socket.websockethandler#AfterconnectionCosed (org.springFramework AfterConnectionClesed (WebSocketSession -Sitzung, Closestatus -Status) löst die Ausnahme aus {String userId = this.getUerId (Sitzung); if (stringutils.isnoneblank (userId)) {usermap.remove (userId); System.err.println ("this" + userID + "Benutzer wurde erfolgreich geschlossen"); } else {System.err.println ("Wenn geschlossen wird, erhalten Sie die Benutzer -ID leer"); }} / *** Diese Methode wird aufgerufen, wenn eine WebSocket -Verbindung hergestellt wird. this.getUerId (Sitzung); if (stringutils.isnoneblank (userId)) {usermap.put (userId, Sitzung); Session.SendMessage (neue Textmessage ("WebSocket -Verbindung erfolgreich hergestellt!")); }} /*** Wenn der Client WebSocket.Send aufruft, wird diese Methode für Datenkommunikation aufgerufen. @Override public void Handlemessage (WebSocketSession -Sitzung, WebSocketMessage <?> Nachricht) löst die Ausnahme aus {String msg = message.toString (); String userId = this.getUerId (Sitzung); System.err.println ("Die vom Benutzer gesendete Nachricht"+userID+"ist:"+msg); Message = New TextMessage ("Der Server hat die Nachricht erhalten, msg ="+msg); Session.SendMessage (Nachricht); } / *** Wenn eine Ausnahme im Übertragungsprozess auftritt, nennen Sie diese Methode* @see org.springframework.web.socket.WebsocketHandler#Handletransporterror (org. Sitzung, Throwable E) löst Ausnahme aus {WebSocketMessage <string> message = new TextMessage ("Ausnahmenachricht:"+e.getMessage ()); Session.SendMessage (Nachricht); } / ** * * @see org.springframework.web.socket.websocketHandler#SupportSpartialMessages () * / @Override public boolean SupportSpartialMessages () {return false; } / ** * sendMessAgetouser: Senden Sie an den angegebenen Benutzer * @Author ZHAOSHOUYUN * @param userId * @param Inhalt * @Since Jdk 1.7 * / public void sendMessAgetouser (String userID, String -Inhalt) {WebSocketSsion Session if (session! Session.SendMessage (Nachricht); } catch (ioException e) {e.printstacktrace (); }}} / ** * sendMessAgetoAllusers: Senden Sie an alle Benutzer * @Author Zhaoshouyun * @param contents * @Since Jdk 1.7 * / public void sendMessAgetoAllusers (String -Inhalt) {set <string> userIds = usermap.keyset (); für (String userID: userIDs) {this.sendMessAgetouser (userId, Inhalt); }} / ** * getUserid: user id * @Author Zhaoshouyun * @param session * @return * @Since Jdk 1.7 * / private String getUserid (wetocketSession Session) {try {string userId = (String) session.getAttributes (). Get (user_key); userID zurückgeben; } catch (Ausnahme e) {e.printstacktrace (); } return null; }}Schritt 3: Schreiben Sie die Konfiguration im Zusammenhang mit WebSocket-Bezogen. Natürlich können Sie sie in XML konfigurieren. Ich verwende jetzt keine XML-Konfiguration und benutze die Codekonfiguration und muss ein Scan-Paket in XML <Kontext hinzufügen: component-scan base-package = "com.zsy.websocket" />
/** * Projektname: Springrabbitmq * Dateiname: WebSocketConfig.java * Paketname: com.zsy.websocket * Datum: 13:10:33 Uhr Am 31. Januar 2018 * Copyright (c) 2018, Zhaoshouyun Alle Rechte reserviert. * * / / ** * Projektname: Springrabbitmq * Dateiname: WebSocketconfig.java * Paketname: com.zsy.websocket * Datum: 13:10:33 Uhr am 31. Januar 2018 * Copyright (C) 2018, Zhaoshouyun Alle Rechte reserviert. * */ package com.zsy.websocket; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.web.socket.websockethandler; import org.springframework.web.socket.config.annotation.enableWebsocket; import org.springframework.web.socket.config.annotation.websocketconfiger; import org.springframework.web.socket.config.Annotation.websocketHandhandlerregistry; /** * KlasseName: WebSocketConfig * Funktion: Todo -Funktion. * Datum: 31. Januar 2018 um 13:10:33 Uhr * @Author Zhaoshouyun * @Version * @Since Jdk 1.7 * / @Configuration @enableWebsocket Public Class WebSocketConfig Implements WebSocketConfigurer { / ** * Register Handle * @see org.springframework.web.socket.config.annotation.websocketconFigurer#RegisterWebsocketHandhers (org.springframework.web.socket.config.annotation Registry.AddHandler (myHandler (), "/testHandler").addinterceptors(new WebSocketInterceptor ()); Registry.AddHandler (myHandler (), "/socketjs/testHandler") } @Bean public WebSockeThandler myHandler () {return New myMessageHandler (); }} Schritt 4: Schreiben Sie einen WebSocket -Adapter
Paket com.zsy.websocket; import Java.util.map; import org.springframework.http.server.serverhttprequest; import org.springframework.http.server.serverhttPresponse; import org.springframework.http.server.servletServerhttprequest; import org.springframework.web.socket.websockethandler; import org.springframework.web.socket.server.support.httpSessionHandshakeInterceptor; /** * KlasseName: WebSocketInterceptor * Funktion: Todo -Funktion. * Datum: 31. Januar 2018 um 11:42:34 Uhr * @Author Zhaoshouyun * @Version * @Since Jdk 1.7 * / public class WebSocketInterceptor erweitert HttpSessionHandShakeInterceptor { / ** * Todo beschreibt kurz die Implementierungsfunktion dieser Methode (optional). * @see org.springframework.web.socket.server.support.httpSessionHandShakeInterceptor#vorhandshake (org.springframework.http.server.serverhttprequest, org.springframework org.springframework.web.socket.WebSocketHandler, java.util.Map) */ @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { if(request instanceof ServletServerHttpRequest){ ServletServerHttpRequest serverhttprequest = (ServletServerHttprequest) Anfrage; // Parameter String userID = serverhttprequest .getServletRequest (). GetParameter ("userID"); Attribute.put (myMessageHandler.user_key, userId); } Return true; }} Die entsprechenden JS in Schritt 5:
<%@ page Language = "java" contentType = "text/html; charset = iSO-8859-1" pageCoding = "iso-8859-1"%> <! docType html public "-// w3c // dtd html 4.01 tranitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <kopf> <meta http-equiv = "content-type" content = "text/html; charset = iso-8859-1"> <titels einfügen. // Bestimmen Sie zuerst, ob WebSocket unterstützt wird, wenn ('WebSocket' im Fenster) {WebSocket = new WebSocket ("WS: // localhost: 8085/SpringTest/testHandler? UserId = zhaosouyun"); } else if ('Mozwebocket' im Fenster) {WebSocket = new Mozwebsocket ("WS: // localhost: 8085/SpringTest/testHandler? userId = zhaosouyun"); } else {WebSocket = new SocKJS ("http: // localhost: 8085/springest/socketjs/testHandler? userId = zhaoshouyun"); } // beim Öffnen der Verbindung, WebSocket.onopen = function (evnt) {console.log ("webSocket.onopen"); }; // beim Empfangen der Nachricht, webSocket.onMessage = function (evnt) {alert (evnt.data); }; webSocket.onerror = function (evnt) {console.log ("WebSocket.onError"); }; WebSocket.onclose = function (evnt) {console.log ("webSocket.onclose"); }; Funktion sagt () {// Der Client sendet aktiv eine Nachricht webSocket.send (document.getElementById ('msg'). Wert); } </script> </head> <body> <Eingabe type = "text" value = "" id = "msg"> <button onclick = "say ()"> </button> </body> </html> Schritt 6 Test:
Paket com.zsy.test.controller; import Java.util.hashMap; import Java.util.map; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestbody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.zsy.websocket.mymessageHandler; /** * ClassName: TestController * Funktion: Todo -Funktion. * Datum: 14. Dezember 2017 um 11:11:23 Uhr * @Author Zhaoshouyun * @Version * @Since Jdk 1.7 */ @Controller Public Class TestController {@autowired MyMessageHandler Handler; @RequestMapping ("/get") public String get () {return "Index"; } @ResponseBody @RequestMapping ("/get1") public String send (String -Name) {Handler.SendMessAgetouser ("Zhaoshouyun", "Inhalt vom Server gesendet:"+name); zurück "Erfolg"; }}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.