Cet article partage avec vous SpringMVC intégré WebSocket pour implémenter la poussée de message pour votre référence. Le contenu spécifique est le suivant
1. Créez un arrière-plan pour le protocole de poignée de main WebSocket
(1) classe d'implémentation de poignée de main
/ ** * Nom du projet: Prix * Nom du fichier: Handshake.java * Nom du package: com.yun.websocket * Date: 3 septembre 2016 à 4:44:27 PM * Copyright (C) 2016 578888218 @ qq.com tous les droits réservés. * / package com.yun.websocket; importation 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; / ** * Titre: Handshake <br/> * Description: * @ Company: Qingdao litu hi-tech <br/> * @ auteur: liu yunsheng * @ version: v1.0 * @ depuis: JDK 1.7.0_80 * @ Date: 3 septembre 2016 AVANTHANDSHAKE (requête ServerHttpRequest, réponse serverHttpResponse, WebSockethandler wshandler, map <string, objet> attributs) lève une exception {// Todo Générat Auto-Generated Stub String jspcode = ((servletserverHttprequest) request) .getServletRerest (). GetParameter ("jspcode"); // tag user // string userId = (string) session.getAttribute ("userId"); if (jspcode! = null) {attributs.put ("jspcode", jspcode); } else {return false; } return true; } @Override public void Afterhandshake (requête ServerHttpRequest, réponse ServerHttpResponse, WebSockethandler wshandler, exception exception) {// TODO Méthode générée automatiquement Stub}}(2) classe d'implémentation MyWebsocketConfig
/ ** * Nom du projet: Prix * Nom du fichier: MyWebSocketConfig.java * Nom du package: com.yun.websocket * Date: 3 septembre 2016 à 4:52:29 PM * Copyright (c) 2016 578888218 @ qq.com Tous droits réservés. * / package com.yun.websocket; import javax.annotation.resource; import org.springframework.sterereotype.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.websocketConfigurer; import org.springframework.web.socket.config.annotation.websockethandlerRegistry; / ** * Titre: MyWebsocketConfig <br/> * Description: * @ Company: Qingdao litu hi-tech <br/> * @ auteur: liu yunsheng * @ version: v1.0 * @ depuis: jdk 1.7.0_80 * @ date: 3 septembre 2016 à 4:52:29 PMOCHER MyWebSocketConfig étend WebMvcConfigurerAdapter implémente WebSocketConfigurer {@Resource MyWebSockethandler Handler; @Override public void Registerwebsockethandlers (WebSockethandlerRegistry Registry) {// TODO Généré par la méthode Stub Registry.AddHandler (Handler, "/wsmy").AddInterceptors(New Handshake ()); Registry.adddhandler (Handler, "/wsmy/sockjs").AddInterceptors(New Handshake ()). WithSockjs (); }}(3) MyWebsockethandler Implémentation Class
/ ** * Nom du projet: Prix * Nom du fichier: MyWebsockethandler.java * Nom du package: com.yun.websocket * Date: 3 septembre 2016 à 16:55:12 PM * Copyright (c) 2016 578888218 @ qq.com Tous droits réservés. * / package com.yun.websocket; Importer java.io.ioException; import java.util.hashmap; Importer java.util.iterator; importation java.util.map; import java.util.map.entry; import org.springframework.sterereotype.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; / ** * Titre: mywebsockethandler <br/> * Description: * @ Company: Qingdao litu hi-tech <br/> * @ auteur: liu yunsheng * @ version: v1.0 * @ depuis: jdk 1.7.0_80 * @ date: 3 septembre 2016 Map final <String, WebSocketSession> UsherSockeTessionMap; static {usherocketSessionMap = new HashMap <String, WebSocketSession> (); } @Override public void AfterConnectionEstAged (WebSocketSession Session) lève l'exception {// TODO Méthode générée automatique Stub String jspcode = (string) session.GethandShakeAtButes (). Get ("jspcode"); if (usherocketessionmap.get (jspcode) == null) {usherrocketSessionMap.put (jspcode, session); } pour (int i = 0; i <10; i ++) {// Broadcast (new TextMessage (new gsonBuilder (). Create (). TOJSON ("/" numéro / ": /" + i + "/" "))); session.sendMessage (new TextMessage (new GsonBuilder (). Create (). TOJSON ("/" numéro / ": /" + i + "/" "))); }} @Override public void handLeMessage (Session WebSocketSession, WebSocketMessage <?> Message) lève une exception {// TODO GÉNÉRATEUR AUTO-GÉNÉRÉ SUB // Message Msg = new GSON (). FromJson (message.getPayload (). TOSTRING (), Message.Class); //msg.setDate(New Date ()); // sendMessageTouser (msg.getto (), new TextMessage (new gsonBuilder (). setDateFormat ("yyyy-mm-dd hh: mm: ss"). create (). tojson (msg))); session.sendMessage (message); } @Override public void handletransporterror (session WebSocketSession, exception throwable) lève une exception {// TODO Méthode générée automatiquement Stub if (session.isopen ()) {session.close (); } Iterator <entrée <string, WebSocketSession >> it = usorrocketSessionMap .EntrySet (). Iterator (); // Supprime la session du socket while (it.hasnext ()) {entrée <string, WebsocketSession> entrée = it.next (); if (entry.getValue (). getID (). equals (session.getId ())) {UsherSockeTessionMap.Remove (Entry.getKey ()); System.out.println ("La session de socket a été supprimée: ID utilisateur" + entrée.getKey ()); casser; }}} @Override public void AfterConnectionClosed (WebSocketSession Session, CloserSatus CloserStatus) lève une exception {// TODO Méthode générée automatique Stub System.out.println ("WebSocket:" + session.getid () + "close"); Iterator <entrée <string, WebSocketSession >> it = usherCoMetSessionMap .EntrySet (). Iterator (); // Supprime la session du socket while (it.hasnext ()) {entrée <string, WebsocketSession> entrée = it.next (); if (entry.getValue (). getID (). equals (session.getId ())) {UsherSockeTessionMap.Remove (Entry.getKey ()); System.out.println ("La session de socket a été supprimée: ID utilisateur" + entrée.getKey ()); casser; }}} @Override public boolean supportSpartialMessages () {// Todo Méthode générée automatique Stub return false; } / ** * en vrac * @title: diffusion * @description: todo * @param: @param message * @param: @throws ioException * @return: void * @author: liu yunsheng * @date: 4:23:30 pm le 10 septembre 2016 * @throws * / public void broadcast (final textmesage message) lance ioexception {iterator <landing, textmesage message) lance ioexception ioexception {iterator <landing, wring, final message WebSocketSession >> it = usherocketSessionMap .EntrySet (). Iterator (); // Envoi de masse multithreading while (it.hasnext ()) {Final Entry <String, WebSocketSession> entrée = it.next (); if (entry.getValue (). isOpen ()) {new Thread (new Runnable () {public void run () {try {if (entry.getValue ().}} catch (ioException e) {e.printStackTrace ();}}}}}}}). }}}} / ** * Envoyez un message à la page d'inspection d'ingénierie en temps réel de tous les utilisateurs en ligne * * @param Message * @throws ioException * / public void sendMessageTojsp (Final TextMessage Message, Type de chaîne) lance ioException {Iterator <entrée <string, iTerator (); // Envoi de masse multithread while (it.hasnext ()) {Final Entry <String, WebSocketSession> entrée = it.next (); if (entry.getValue (). isOpen () && entry.getKey (). contient (type)) {new Thread (new Runnable () {public void run () {try {if (entry.getValue (). Isopen ()) {entry.getValue (). } }).commencer(); }}}}}}2. Créez une réception pour le traitement de la poignée de main WebSocket
<script> var path = '<% = basepath%>'; var userId = 'lys'; if (userId == - 1) {window.location.href = "<% = basepath2%>" rel = "externe nofollow"; } var jspcode = userId + "_ aaa"; var WebSocket; if ('Websocket' dans la fenêtre) {WebSocket = new WebSocket ("ws: //" + path + "wsmy? jspcode =" + jspcode); } else if ('mozwebsocket' dans la fenêtre) {WebSocket = new Mozwebsocket ("ws: //" + path + "wsmy? jspcode =" + jspcode); } else {WebSocket = new sockjs ("http: //" + path + "wsmy / sockjs? jspcode =" + jspcode); } Websocket.onOpen = fonction (événement) {console.log ("WebSocket: connecté"); console.log (événement); }; WebSocket.OnMessage = fonction (événement) {var data = json.parse (event.data); console.log ("WebSocket: a reçu un message -norm", données); alert ("WebSocket: a reçu un message"); }; WebSocket.onerror = fonction (événement) {console.log ("WebSocket: erreur s'est produit"); console.log (événement); }; WebSocket.OnClose = fonction (événement) {console.log ("WebSocket: close"); console.log (événement); } </ script>3. Backgrond WebSocket Poussez à travers l'appel du contrôleur
/ ** * Nom du projet: Prix * Nom du fichier: GarlicpriceController.java * Nom du package: com.yun.price.garlic.Controller * Date: 23 juin 2016 à 3:23:46 PM * Copyright (c) 2016 578888218 @ qq.com Tous droits réservés. * / package com.yun.price.garlic.Controller; Importer java.io.ioException; Importer java.util.date; Importer java.util.list; import javax.annotation.resource; Importer javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.sterreotype.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.garlicprimemodel; import com.yun.price.garlic.service.garlicPricesVice; import com.yun.websocket.mywebsockethandler; / ** * Titre: GarlicpriceController <br/> * Description: * * @Company: Qingdao Litu Hi-Tech <br/> * @author: liu yunsheng * @version: v1.0 * @Since: JDK 1.7.0_80 * @Date: 23 juin 2016 à 3:23:46 PM <br/> * / @Date Class Public Class GarlicpriceController {@Resource MyWebsockethandler MyWebsockethandler; @RequestMapping (value = "GarlicPriceController / TestWebsocket", méthode = {requestMethod.post, requestMethod.get}, products = "application / json; charset = utf-8") @ResponseBody String TestWebSocket () lance ioException {newwebsockethandler.sendmessagetojsp (new textMessage (new textMessage (newsise GsonBuilder (). Create (). TOJSON ("/" numéro / ": /" + "GarlicpriceController / TestWebsocket" + "/" "))," aaa "); return" 1 ";}}4. Le package JAR a utilisé
<dependency> <proupId> org.springframework </prôdId> <ArtefactId> Spring-websocket </retifactid> <version> 4.0.1.release </-version> </Dependency>
5. L'environnement d'opération
Au moins Tomcat8.0 ou plus, sinon une erreur peut être signalée
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.