Dieser Artikel teilt mit Ihnen SpringMVC Integrated WebSocket zum Implementieren von Nachrichten -Push -Push für Ihre Referenz. Der spezifische Inhalt ist wie folgt
1. Erstellen Sie einen Hintergrund für das WebSocket -Handshake -Protokoll
(1) Handshake -Implementierungsklasse
/** *Projektname: Preis *Dateiname: Handshake.java *Paketname: com.yun.websocket *Datum: 3. September 2016 um 4:44:27 Uhr *Copyright (c) [email protected] Alle Rechte reserviert. */ package com.yun.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.handshakeInterceptor; /** *Title: HandShake<br/> *Description: *@Company: Qingdao Litu Hi-Tech<br/> *@author: Liu Yunsheng*@version: v1.0 *@since: JDK 1.7.0_80 *@Date: September 3, 2016 at 4:44:27 pm <br/> */ public class HandShake implements HandshakeInterceptor{ @Override public boolean Vorherab (ServerhttpRequest-Anforderung, ServerhttPesponse-Antwort, WebSockeThandler WSHandler, Map <String, Objekt> Zuschreibungen) löst eine Ausnahme aus {// Todo automatisch generierter Methode Stub String JSPCODE = ((ServletServerhttpRequest). // Tag user // String userID = (String) session.getAttribute ("userId"); if (jspcode! } else {return false; } Return true; } @Override public void Afterhandshake (serverhttpRequest-Anforderung, ServerhttPesponse-Antwort, WebSockeThandler WSHANDLER, Ausnahme) {// Todo automatisch generierter Methode Stub}}}
(2) MyWebsocketConfig -Implementierungsklasse
/** *Projektname: Preis *Dateiname: myWebsocketconfig.java *Paketname: com.yun.websocket *Datum: 3. September 2016 um 16:52:29 Uhr *Copyright (c) 2016,[email protected] Alle Rechte reserviert. */ package com.yun.websocket; import Javax.annotation.Resource; import org.springframework.stereotype.comPonent; import org.springframework.web.servlet.config.annotation.enablewebmvc; import org.springframework.web.servlet.config.annotation.webmvcconFigurerAdapter; import org.springframework.web.socket.config.annotation.enableWebsocket; import org.springframework.web.socket.config.annotation.websocketconfiger; import org.springframework.web.socket.config.Annotation.websocketHandhandlerregistry; /** *Title: MyWebSocketConfig<br/> *Description: *@Company: Qingdao Litu Hi-Tech<br/> *@author: Liu Yunsheng*@version: v1.0 *@since: JDK 1.7.0_80 *@Date: September 3, 2016 at 4:52:29 pm <br/> */ @Component @EnableWebMvc @EnableWebSocket public Klasse MyWebsocketConfig erweitert webmvcconFigurerAdapter implementiert WebSocketConFiger {@resource myWebsocketHandler -Handler; @Override public void RegisterWebSockeThandlers (WebSockeThandlerRegistry-Registrierung) {// Todo automatisch generierte Methode Stub Registry.addHandler (Handler ", /wsmy").addinterceptors(new Handshake ()); Registry.AddHandler (Handler, "/wsmy/sockjs").addinterceptors(new Handshake ()). WithSockjs (); }}
(3) MyWebsockethandler -Implementierungsklasse
/** *Projektname: Preis *Dateiname: MyWebsocketHandler.java *Paketname: com.yun.websocket *Datum: 3. September 2016 um 16:55:12 Uhr *Copyright (c) 2016,[email protected] Alle Rechte reserviert. */ package com.yun.websocket; importieren java.io.ioException; import Java.util.hashMap; Import Java.util.iterator; import Java.util.map; import Java.util.map.entry; import org.springframework.stereotype.comPonent; 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; import com.google.gson.gsonBuilder; /** *Title: MyWebSocketHandler<br/> *Description: *@Company: Qingdao Litu Hi-Tech<br/> *@author: Liu Yunsheng*@version: v1.0 *@since: JDK 1.7.0_80 *@Date: September 3, 2016 at 4:55:12 pm <br/> */ @Component public class MyWebSocketHandler implements WebSocketHandler{ öffentliche statische endgültige Karte <String, WebSocketSession> userSocketSessionMap; static {userSocketSessionMap = new HashMap <String, WebSocketSession> (); } @Override public void AfterConnectionESTABLEDS (WebSocketSession Session) löst eine Ausnahme aus {// Todo automatisch generierte Methode Stub String JSPCODE = (STRING) Session.getHandShakeAttributes (). if (userSocketSessionMap.get (jspcode) == null) {userSocketSessionMap.put (jspcode, Sitzung); } für (int i = 0; i <10; i ++) {// Broadcast (neuer textMessage (neuer gsonbuilder (). create (). tojson ("/" number/":/"+i+"/"))); Session }} @Override public void Handlemessage (WebSocketSession-Sitzung, WebSocketMessage <?> Nachricht) löst Ausnahme aus {// todo auto-generierte Methode Stub // message msg = new gson (). //msg.setdate(new Date ()); // sendMessagetouser (msg.getto (), neuer TextMessage (neuer gsonBuilder (). setDateFormat ("yyyy-mm-dd hh: mm: ss"). create (). tojson (msg)); Session.SendMessage (Nachricht); } @Override public void Handletransporterror (WebSocketSession Session, Throwable Exception) löst Ausnahme aus {// Todo automatisch generierte Methode Stub if (session.isopen ()) {session.close (); } Iterator <Eintrag <String, WebSocketSession >> iT = userSocketSessionMap .EntrySet (). Iterator (); // Socket -Sitzung entfernen (it.hasNext ()) {Eintrag <String, WebSocketSession> Eintrag = it.next (); if (Eintrag.getValue (). getId (). Equals (session.getId ()) {userSocketSessionMap.remove (Entry.GetKey ()); System.out.println ("Socket -Sitzung wurde entfernt: Benutzer -ID" + Eintrag.getKey ()); brechen; }}} @Override public void AfterConnectionClosed (WebSocketSession-Sitzung, Closestatus conthestatus) löst eine Ausnahme aus {// Todo automatisch generierte Methode stub system.out.println ("WebSocket:" + session.getId () + "Close"); Iterator <Eintrag <String, WebSocketSession >> iT = userSocketSessionMap .EntrySet (). Iterator (); // Socket -Sitzung entfernen (it.hasNext ()) {Eintrag <String, WebSocketSession> Eintrag = it.next (); if (Eintrag.getValue (). getId (). Equals (session.getId ()) {userSocketSessionMap.remove (Entry.GetKey ()); System.out.println ("Socket -Sitzung wurde entfernt: Benutzer -ID" + Eintrag.getKey ()); brechen; }}} @Override public boolean SupportSpartialMessages () {// Todo Auto-generierter Methode Stub Return Falsch; } / ** * bulk * @title: sendest * @Description: todo * @param: @param meldung * @param: @throw ioException * @Return: void * @Author: liu yunsheng * @date: 4:23:30 PM am 10. September 2016 * @throws * / public void (endgültige text text text) throws itroration (public void) (endgültige text message) throws itroration (uwal void senda (teurer text text WebSocketSession >> iT = userSocketSessionMap .EntrySet (). Iterator (); // Multithreading -Masse sendet while (it.hasNext ()) {endgültiger Eintrag <String, WebSocketSession> Eintrag = it.Next (); if (Eintrag. }}}} / ** * Senden Sie eine Nachricht an die Echtzeit-Engineering-Inspektionsseite aller Online-Benutzer * * @param meldung * @throws ioException * / public void sendMessAgetojsp (endgültige Textmessage, String-Typ) veröffentlichen ioException {iterator <string, websocketSession> it = userSocketSSet (). // Multithread -Masse sendet while (it.hasnext ()) {endgültiger Eintrag <String, WebSocketSession> Eintrag = it.Next (); if (Eintrag.GetValue (). Isopen () && Eintrag.GeteKey (). Enthält (Typ)) {neuer Thread (new Runnable () {public void run () {try {if (Entry.getValue (). Isopen () {Eintrieb. } }).Start(); }}}}}}
2. Erstellen Sie eine Rezeption für die Websocket -Handshake -Verarbeitung
<Script> var path = '<%= Basepath%>'; var userId = 'lys'; if (userId ==-1) {window.location.href = "<%= basepath2%>" rel = "externer nofollow"; } var jspcode = userId+"_ aaa"; var webocket; if ('WebSocket' im Fenster) {WebSocket = new WebSocket ("ws: //" + path + "wsmy? jspcode =" + jspcode); } else if ('MoZwebsocket' im Fenster) {WebSocket = new Mozwebsocket ("ws: //" + path + "wsmy? jspcode =" + jspcode); } else {WebSocket = new SocKJS ("http: //" + path + "wsmy/socKJS? jspcode =" + jspcode); } webocket.onopen = function (Ereignis) {console.log ("WebSocket: Connected"); console.log (Ereignis); }; WebSocket.onMessage = Funktion (Ereignis) {var data = json.Parse (Ereignis.Data); console.log ("WebSocket: Empfangen Sie eine Nachricht -norm", Daten); Alert ("WebSocket: Empfangen Sie eine Nachricht"); }; WebSocket.onerror = Funktion (Ereignis) {console.log ("WebSocket: Fehler aufgetreten"); console.log (Ereignis); }; WebSocket.onclose = function (Ereignis) {console.log ("WebSocket: close"); console.log (Ereignis); } </script>3.. WebSocket -Hintergrund drücken Sie den Controller -Anruf durch
/** *Projektname: Preis *Dateiname: garlicpriceController.java *Paketname: com.yun.price.garlic.controller *Datum: 23. Juni 2016 um 3:23:46 Uhr *Copyright (c) [email protected] All Rights Rights Race Race Raid reserviert. */ package com.yun.price.garlic.controller; importieren java.io.ioException; import Java.util.date; importieren java.util.list; import Javax.annotation.Resource; importieren javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpSession; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.requestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.requestContexTHolder; import org.springframework.web.context.request.servletrequestattributes; import org.springframework.web.servlet.ModelandView; import org.springframework.web.socket.textMessage; import com.google.gson.gsonBuilder; import com.yun.common.entity.datagrid; Import com.yun.price.garlic.dao.entity.garlicprice; import com.yun.price.garlic.model.garlicpricemodel; import com.yun.price.garlic.service.garlicpriceService; import com.yun.websocket.mywebsockethandler; /** * Title: GarlicPriceController<br/> * Description: * * @Company: Qingdao Litu Hi-Tech<br/> * @author: Liu Yunsheng* @version: v1.0 * @since: JDK 1.7.0_80 * @Date: June 23, 2016 at 3:23:46 pm <br/> */ @Controller public class GarlicpriceController {@resource mywebsockeThandler mywebsockeThandler; @RequestMapping (value = "garlicpriceController/testwebsocket", method = {requestMethod.post, RequestMethod.get}, procies = "application/json; charset = utf-8") @RespondeBody String testwebsocket () throws ioException {myWebsocketoToStoSGe (myWebsockeSockeSocke {MyWebsockeSocketoStoToStoStoRay {MyWebsockeSocke). GsonBuilder (). Create (). Tojson ("/" number/":/"+"garlicpriceController/testWebsocket"+"/" ")," aaa "); return" 1 ";}}
4. Das verwendete JAR -Paket
<Depopenty> <gruppe> org.springFramework </Groupid> <artifactId> Spring-Websocket </artifactId> <version> 4.0.1.Release </Version> </abhängig>
5. Die Betriebsumgebung
Mindestens tomcat8.0 oder höher, sonst kann ein Fehler gemeldet werden
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.