Este artículo comparte con usted SpringMVC Integrado WebSocket para implementar el mensaje de mensajes para su referencia. El contenido específico es el siguiente
1. Cree un fondo para el protocolo de apretón de manos de WebSocket
(1) clase de implementación de apretones de manos
/** *Nombre del proyecto: Precio *Nombre del archivo: Handshake.java *Nombre del paquete: com.yun.websocket *Fecha: 3 de septiembre de 2016 a 4:44:27 PM *Copyright (c) 2016,[email protected] Todos los derechos reservados. */ paquete com.yun.websocket; import java.util.map; importar org.springframework.http.server.serverhttprequest; importar org.springframework.http.server.serverhttpresponse; importar org.springframework.http.server.servletserverhttprequest; importar org.springframework.web.socket.websockethandler; importar org.springframework.web.socket.server.handshakeinterceptor; /** *Título: HandShake <Br/> *Descripción: *@Compañía: Qingdao Litu Hi-Tech <br/> *@Autor: Liu Yunsheng *@Versión: V1.0 *@Desde: JDK 1.7.0_80 *@Fecha: 3 de septiembre de 2016 a 4:44:27 PM <br/> */Public Class Handhake Handshakeinterceptor {@@@Septiembre ANTESHANDSHAKE (Solicitud de serverHttpRequest, Respuesta ServerHttPesponse, WebSocketHandler wshandler, map <string, object> atributes) lanza la excepción {// tODO auto-generado método stub string jspcode = ((servletserverHtttprequest). solicitud) .getServeTreBrequest (). getparameter ("jspCode"; ");"); // etiqueta user // string userId = (string) session.getAttribute ("userId"); if (jspcode! = null) {attributes.put ("jspcode", jspcode); } else {return false; } return verdadero; } @Override public void AfterHandShake (Solicitud de serverhttprequest, Respuesta de serverhttpResponse, WebSockethandler Wshandler, excepción de excepción) {// TODO Método Generado automático}}
(2) Clase de implementación de MyWebSocketConfig
/** *Nombre del proyecto: Precio *Nombre del archivo: mywebsocketconfig.java *Nombre del paquete: com.yun.websocket *Fecha: 3 de septiembre de 2016 a 4:52:29 PM *Copyright (c) 2016,[email protected] Todos los derechos reservados. */ paquete com.yun.websocket; import javax.annotation.resource; importar org.springframework.stereotype.component; importar org.springframework.web.servlet.config.annotation.enablewebmvc; importar org.springframework.web.servlet.config.annotation.webmvcconfigurerAdapter; importar org.springframework.web.socket.config.annotation.enableWebSocket; importar org.springframework.web.socket.config.annotation.webSocketConfigurer; importar org.springframework.web.socket.config.annotation.websockethandlerregistry; /** *Título: myWebSocketConfig <br/> *Descripción: *@Company: Qingdao Litu Hi-Tech <br/> *@Autor: Liu Yunsheng *@Versión: V1.0 *@Desde: JDK 1.7.0_80 *@Fecha: 3 de septiembre de 2016 a las 4:52:29 PM <br/> */@Component @enablewebmvc @Ensocket ClassSocket MyWebSocketConfig extiende WebMVCConfigurerAdapter implementa WebSocketConfigurer {@Resource MyWebSocketHandler Handler; @Override public void RegisterwebSockethandlers (Registro de WebSockethandlerRegistry) {// TODO Método Generado automático Registro.Addhandler (Handler, "/wsmy").addinterceptores(Nnew Hand Shake ()); Registry.Addhandler (Handler, "/wsmy/sockjs").addinterceptors(new handshake ()). withsockjs (); }}
(3) Clase de implementación de MyWebSocketHandler
/** *Nombre del proyecto: Precio *Nombre del archivo: mywebsockethandler.java *Nombre del paquete: com.yun.websocket *Fecha: 3 de septiembre de 2016 a 4:55:12 PM *Copyright (c) 2016,[email protected] Todos los derechos reservados. */ paquete com.yun.websocket; import java.io.ioException; import java.util.hashmap; import java.util.iterator; import java.util.map; import java.util.map.entry; importar org.springframework.stereotype.component; importar org.springframework.web.socket.cloestatus; importar org.springframework.web.socket.textmessage; importar org.springframework.web.socket.websockethandler; importar org.springframework.web.socket.webSocketMessage; importar org.springframework.web.socket.websocketsession; import com.google.gson.gsonbuilder; /** *Título: MyWebSocketHandler <br/> *Descripción: *@Company: Qingdao Litu Hi-Tech <br/> *@Autor: Liu Yunsheng *@Versión: V1.0 *@Desde: JDK 1.7.0_80 *@Fecha: 3 de septiembre de 2016 a 4:55:12 PM <br/> */@Component MyWebsockethethetler mapa final estático <String, WebSocketSession> UserSocketSessionMap; static {UserSocketSessionMap = new Hashmap <String, WebSocketSession> (); } @Override public void AfterConnectionSeStablished (Session WebSocketSession) lanza la excepción {// TODO Método Generado automático String JSPCode = (String) Session.GethandShakeatTributes (). Get ("JSPCode"); if (UsersocketSessionMap.get (JSPCode) == NULL) {UserSOCHetSessionMap.put (JSPCode, Session); } for (int i = 0; i <10; i ++) {// broadcast (new TextMessage (new GsonBuilder (). Create (). TJson ("/" Number/":/"+i+"/" ")); Session.SendMessage (New TextMessage (New GsonBuilder (). }} @Override public void HandLemessage (Sesión de WebSocketSession, WebSocketMessage <?> Mensaje) lanza la excepción {// TODO Método Generado automático stub // Message msg = new Gson (). Fromjson (Message.getPayLoad (). ToString (), Message.classs); //msg.setdate(new date ()); // sendMessageToUser (msg.getto (), nuevo textMessage (nuevo gsonBuilder (). setDateFormat ("yyyy-mm-dd hh: mm: ss"). create (). tojson (msg))); session.sendMessage (mensaje); } @Override public void HandletransporterRor (Sesión de WebSocketSession, Excepción de lanzamiento) lanza la excepción {// TODO Auto Generated Method Stub if (session.isopen ()) {session.close (); } Iterator <Entry <String, WebSocketSession >> IT = UsersOctetSessionMap .EntrySet (). Iterator (); // eliminar la sesión de socket while (it.hasnext ()) {Entry <String, WebSocketSession> Entry = It.Next (); if (entrada.getValue (). getId (). Equals (session.getId ())) {UserSocketTetSessionMap.Remove (Entry.getKey ()); System.out.println ("Se ha eliminado la sesión de socket: ID de usuario" + entry.getKey ()); romper; }}} @Override public void AfterConnectionClosed (Sesión de WebSocketSession, CloseStatus CloseStatus) lanza la excepción {// TODO Método Generado automático Stub System.out.println ("WebSocket:" + Session.getID () + "Cerrar"); Iterator <Entry <String, WebSocketSession >> it = UsersOctetSessionMap .EntrySet (). Iterator (); // eliminar la sesión de socket while (it.hasnext ()) {Entry <String, WebSocketSession> Entry = It.Next (); if (entrada.getValue (). getId (). Equals (session.getId ())) {UserSocketTetSessionMap.Remove (Entry.getKey ()); System.out.println ("Se ha eliminado la sesión de socket: ID de usuario" + entry.getKey ()); romper; }}} @Override public Boolean SupportSPartialMessages () {// TODO Auto Generado Método STUB Return False; } / ** * Bulk * @title: Broadcast * @Description: TODO * @param: @param Mensaje * @param: @throws ioexception * @return: void * @author: liu yunsheng * @date: 4:23:30 pm en el 10 de septiembre de 2016 * @throws * / public vide (final de texto) WebSocketSession >> IT = UsersocketSessionMap .EntrySet (). Iterator (); // envío de masa multithreading while (it.hasnext ()) {Entrada final <String, WebSocketSession> Entry = IT.Next (); if (entry.getValue (). isopen ()) {new Thread (new runnable () {public void run () {try {if (entry.getValue (). isopen ()) {Entry.getValue (). SendMessage (Message);}} Catch (IOException e) {E.PrintstActAtraCe ();}}}} (start (). }}}} / ** * Envíe un mensaje a la página de inspección de ingeniería en tiempo real de todos los usuarios en línea * * @param Mensaje * @throws ioexception * / public void sendMessageTOJSP (mensaje de texto final, mensaje de cadena) lanza IOException {iterator <Entry <String, WebSocketSession>> it = UssOctetSessionMapmap .entryset ().).).).).). // envío de masa multithreadado while (it.hasnext ()) {Entrada final <String, WebSocketSession> Entry = IT.Next (); if (entry.getValue (). isopen () && entry.getKey (). contiene (type)) {new Thread (new runnable () {public void run () {try {if (entry.getValue (). isopen ()) {entry.getValue (). SendMessage (mensaje);} Catch (IOException E) {E.PRINTA } }).comenzar(); }}}}}}
2. Cree una recepción para el procesamiento de WebSocket Handshake
<script> var ruta = '<%= basepath%>'; var userId = 'lys'; if (userId ==-1) {window.location.href = "<%= basepath2%>" rel = "nofollow externo"; } var jspcode = userId+"_ aaa"; VAR WebSocket; if ('WebSocket' en Window) {WebSocket = new WebSocket ("ws: //" + path + "wsmy? jspcode =" + jspcode); } else if ('mozwebSocket' en la ventana) {WebSocket = new MozWebSocket ("ws: //" + ruta + "wsmy? jspcode =" + jspcode); } else {WebSocket = new Sockjs ("http: //" + ruta + "wsmy/sockjs? jspcode =" + jspcode); } webSocket.Onopen = function (event) {console.log ("WebSocket: Connected"); console.log (evento); }; websocket.onmessage = function (event) {var data = json.parse (event.data); console.log ("WebSocket: recibió un mensaje -norm", datos); alerta ("WebSocket: recibió un mensaje"); }; WebSocket.Onerror = function (event) {console.log ("WebSocket: Error ocurrió"); console.log (evento); }; WebSocket.Onclose = function (event) {console.log ("WebSocket: Close"); console.log (evento); } </script>3. WebSocket Background Push a través del controlador de controlador
/** *Nombre del proyecto: Precio *Nombre del archivo: GarlicpriceController.java *Nombre del paquete: com.yun.price.garlic.controller *Fecha: 23 de junio de 2016 a 3:23:46 PM *Copyright (c) 2016,[email protected] Todos los derechos reservados. */ paquete com.yun.price.garlic.controller; import java.io.ioException; import java.util.date; import java.util.list; import javax.annotation.resource; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpsession; importar org.springframework.beans.factory.annotation.aUtowired; importar org.springframework.stereotype.controller; importar org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.requestmethod; importar org.springframework.web.bind.annotation.ResponseBody; importar org.springframework.web.context.request.requestContexTholder; importar org.springframework.web.context.request.servletRequestTributes; importar org.springframework.web.servlet.modelandview; importar 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; /** * Título: GarlicPriceController <br/> * Descripción: * * @Company: Qingdao Litu Hi-Tech <br/> * @Author: Liu Yunsheng * @Version: V1.0 * @Since: JDK 1.7.0_80 * @Date: 23 de junio de 2016 a las 3:23:46 pm <BR/> */@controller GarlicPricecontroller {@Resource mywebsockethandler mywebsockethandler; @RequestMapping (value = "GarlicPriceController/TestWebSocket", método = {requestMethod.post, requestMethod.get}, produce = "Application/Json; Charset = Utf-8") @ResponseBodyBody Public String testWebSocket () lanza Iooxception {myWebSockShandler.sendmessageTOJSP (neoxtaxetSage (neoxtexsage (neoxTeMessage (neoxTeMessage (neoxTeMessEG GsonBuilder (). Create (). Tojson ("/" number/":/"+"GarlicPriceController/testWebSocket"+"/")), "aaa"); return "1";}}
4. El paquete jar utilizado
<Spendency> <ProupId> org.springframework </groupid> <artifactid> spring-websocket </artifactid> <versever> 4.0.1.release </ververy> </pendency>
5. El entorno de operación
Al menos Tomcat8.0 o superior, de lo contrario se puede informar un error
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.