Exemple de poussée en temps réel WebSocket écrit en fonction du framework Spring, le contenu spécifique est le suivant
Étape 1: Construisez vous-même un projet SpringMVC, il est très simple, disponible sur Baidu en ligne; Ajouter le fichier POM suivant:
<!-- WebSocket --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>4.2.4.RELEASE</version> </Dependance>
Ma version Spring est 4.2.4, donc WebSocket est également 4.2.4; Il est préférable de garder la même chose que la version printanier
Étape 2: Écrivez un processeur de messages
/ ** * Nom du projet: Springrabbitmq * Nom du fichier: MyMessageHandler.java * Nom du package: com.zsy.websocket * Date: 31 janvier 2018 à 11:10:03 AM * Copyright (c) 2018, Zhaoshouyun tous droits réservés. * * / package com.zsy.websocket; Importer java.io.ioException; importation java.util.map; import java.util.set; 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; / ** * ClassName: MyMessageHandler * Fonction: Implémentez l'interface Webcoket * Date: 31 janvier 2018 à 11:10:03 AM * @Autor Zhaoshouyun * @version * @Since JDK 1.7 * / public class MyMessageHandler Impléments WebSockethandler {// User Key STATIC STATIC FINAL USER_KEY = "Current_USER"; / ** * USERMAP: stockage des informations de connexion utilisateur WebScoket * @Since JDK 1.7 * / Private Final Static Map <String, WebSocketSession> UserMap; statique {userMap = new ConcurrentHashMap <String, WebSocketSession> (30); } /** * This method is called when closing the websocket* @see org.springframework.web.socket.WebSocketHandler#afterConnectionClosed(org.springframework.web.socket.WebSocketSession, org.springframework.web.socket.CloseStatus) */ @Override public void afterConnectionClosed(WebSocketSession session, Statut CloserStatus) lève l'exception {String userId = this.getUserId (session); if (stringUtils.isnoneblank (userId)) {userMap.Remove (userId); System.err.println ("this" + userId + "L'utilisateur a été fermé avec succès"); } else {System.err.println ("Lorsqu'il est fermé, obtenez l'ID utilisateur est vide"); }} / ** * Cette méthode est appelée lors de l'établissement d'une connexion WebSocket * @see org.springframework.web.socket.websockethandler # afterConnectionEstabmed (org.springframework.web.socket.websocketSession) * / @Override public Void AfterConnectionEstablised (webSocketSession Session) throws exception {strigid = this.geterable (webSocketSession Session) throws exception œuvre {strict {strigid = this.geTerable (webSocketSession Session) throws exception œuvre {strict {STRIED = SESSIDERABLY); if (stringUtils.isnoneBlank (userId)) {userMap.put (userId, session); session.sendMessage (new TextMessage ("La connexion WebSocket a été établie avec succès!")); }} / ** * Lorsque le client appelle WebSocket.Send, cette méthode sera appelée pour la communication de données * @see org.springframework.web.socket.websockethandler # handlessage (org.springframework.web.socket.websocketSession, org.spridframe.web.socket.websocketmot HandleMessage (Session WebSocketSession, WebSocketMessage <?> Message) lève l'exception {String msg = message.toString (); String userId = this.getUserId (session); System.err.println ("Le message" + utilisateur + "envoyé par l'utilisateur est:" + msg); Message = new TextMessage ("Le serveur a reçu le message, msg =" + msg); session.sendMessage (message); } / ** * Lorsqu'une exception se produit dans le processus de transmission, appelez cette méthode * @see org.springframework.web.socket.websockethandler # handletransporterror (org.springframework.web.socket.websocketsession, java.lang.throwable) * / @override handletransporterRor (weblowablets) lève exception {WebSocketMessage <string> message = new TextMessage ("Message d'exception:" + e.getMessage ()); session.sendMessage (message); } / ** * * @see org.springframework.web.socket.websockethandler # supportSpartialMessages () * / @Override booléen public supportSpartialMessages () {return false; } / ** * SendMessageTouser: Envoyez à l'utilisateur spécifié * @author zhaoshouyun * @param userId * @param contente * @Since jdk 1.7 * / public void sendMessageTeau (string userId, String Contents) {WebSocketSession session = userMap.get (userId); if (session! = null && session.isopen ()) {try {textMessage message = new TextMessage (contenu); session.sendMessage (message); } catch (ioException e) {e.printStackTrace (); }}} / ** * SendMessageToAllUsers: Envoyez à tous les utilisateurs * @author zhaoshouyun * @param contenu * @Since jdk 1.7 * / public void sendMessageToAlLUSERS (contente de chaîne) {set <string> userrids = usermap.keyset (); for (String userId: userIdS) {this.sendMessageTouser (userId, contenu); }} / ** * getUserId: Obtenez l'id utilisateur * @author zhaoshouyun * @param session * @return * @Since jdk 1.7 * / private String getUserId (WebSocketession session) {try {String userid = (String) session.getAttributes (). get (user_key); return userId; } catch (exception e) {e.printStackTrace (); } return null; }}Étape 3: Écrivez la configuration liée à WebSocket, bien sûr, vous pouvez le configurer dans XML; Je n'utilise pas la configuration XML maintenant, et j'utilise la configuration du code, et j'ai besoin d'ajouter un package de numérisation dans XML <Context: Component-Scan Base-Package = "com.zsy.websocket" />
/ ** * Nom du projet: Springrabbitmq * Nom du fichier: WebSocketConfig.java * Nom du package: com.zsy.websocket * Date: 1:10:33 PM le 31 janvier 2018 * Copyright (c) 2018, Zhaoshouyun tous droits réservés. * * / / ** * Nom du projet: Springrabbitmq * Nom du fichier: WebSocketConfig.java * Nom du package: com.zsy.websocket * Date: 1:10:33 PM le 31 janvier 2018 * Copyright (C) 2018, Zhaoshouyun Tous droits réservés. * * / 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.websocketConfigurer; import org.springframework.web.socket.config.annotation.websockethandlerRegistry; / ** * CLASSNAME: WebSocketConfig * Fonction: Todo Ajouter la fonction. * Date: 31 janvier 2018 à 13:10:33 PM * @Author Zhaoshouyun * @version * @Since JDK 1.7 * / @configuration @enablewebsocket classe publique WebSocketConfig implémente WebocketConfigurer {/ ** * REGISTRE GANCE * @SEE org.springframework.web.socket.config.annotation.websocketConfigurer # registerwebsockethandlers (org.springframework.web.socket.config.annotation.websockethandlergistry) * / @Override Void Registerwebsockethandler (webSockethandlergistry Registry Registry) "/testhandler").addinterceptors(NEW WebSocketInterceptor ()); registry.adddhandler (myHandler (), "/socketjs/testhandler").addinterceptors(NEW WebSocketInterceptor ()). WithSockjs (); } @Bean public Websockethandler myHandler () {return new MyMessageHandler (); }} Étape 4: Écrivez un adaptateur WebSocket
package com.zsy.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.support.httpSessionHandshakeInterceptor; / ** * CLASSNAME: WebSocketInterceptor * Fonction: Todo Ajouter la fonction. * Date: 31 janvier 2018 à 11:42:34 AM * @Author Zhaoshouyun * @version * @Since JDK 1.7 * / classe publique Websocket Interceptor étend httpSessionHandShakeInterceptor {/ ** * TODO décrit brièvement la fonction d'implémentation de cette méthode (facultative). * @see org.springframework.web.socket.server.support.httpSessionhandshakeInterceptor # AVANTHANDSHAKE (org.springframework.http.server.serverhttprequequest, org.springframework.http.server.serverhttprepcestre, org.springframework.web.socket.websockethandler, java.util.map) * / @Override public boolean avant -hnshake (serverhttprequest ServletServerHttpRequest ServerHttpRequest = (ServletserverHttpRequest) Request; // Obtenir un paramètre String userId = serverHttpRequest .getServletRequest (). GetParAmètre ("userId"); attributs.put (myMessageHandler.user_key, userId); } return true; }} Le JS correspondant à l'étape 5:
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = ISO-8859-1" Pageencoding = "ISO-8859-1"%> <! Doctype Html public "- // w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <adread> <meta http-equiv = "Content-Type" Content = "Text / html; charset = iso-8859-1"> <titre> insert Title ici </ title> <script type = "text / javascript"> var websocket; // Déterminez d'abord si WebSocket est pris en charge if ('WebSocket' dans Window) {WebSocket = new WebSocket ("ws: // localhost: 8085 / springTest / testHandler? Userid = zhaoshouyun"); } else if ('mozwebsocket' dans la fenêtre) {WebSocket = new Mozwebsocket ("ws: // localhost: 8085 / springtest / testhandler? userid = zhaoshouyun"); } else {WebSocket = new sockjs ("http: // localhost: 8085 / springtest / socketjs / testhandler? userid = zhaoshouyun"); } // Lors de l'ouverture de la connexion, WebSocket.onOpen = fonction (evnt) {console.log ("Websocket.onOpen"); }; // Lors de la réception du message, WebSocket.OnMessage = function (evnt) {alert (evnt.data); }; WebSocket.onerror = function (evnt) {console.log ("Websocket.onerror"); }; WebSocket.OnClose = function (evnt) {console.log ("Websocket.Onclose"); }; function sait () {// Le client envoie activement un message WebSocket.Send (document.getElementById ('msg'). valeur); } </ script> </ head> <body> <input type = "text" value = "" id = "msg"> <bouton onclick = "say ()"> </ bouton> </ body> </html> Étape 6 Test:
package com.zsy.test.Controller; import java.util.hashmap; importation java.util.map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.value; import org.springframework.sterreotype.Controller; import org.springframework.web.bind.annotation.requestbody; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.ResponseBody; Importer com.zsy.websocket.myMessageHandler; / ** * ClassName: TestController * Fonction: Todo Ajouter la fonction. * Date: 14 décembre 2017 à 11:11:23 AM * @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", "Contenu envoyé par le serveur:" + name); retourner le "succès"; }}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.