Este artigo compartilha com você o Websocket integrado Springmvc para implementar a mensagem Push para sua referência. O conteúdo específico é o seguinte
1. Crie um plano de fundo para o protocolo de handshake websocket
(1) Classe de implementação do handshake
/** *Nome do projeto: Preço *Nome do arquivo: Handshake.java *Nome do pacote: com.yun.webSocket *Data: 3 de setembro de 2016 às 16:44:27 *Copyright (c) [email protected] Todos os direitos reservados. */ pacote com.yun.webSocket; importar java.util.map; importar org.springframework.http.server.serverhttprequest; importar org.springframework.http.server.serverhttpropSe; importar org.springframework.http.server.servletServerhttPrequest; importar org.springframework.web.socket.websockethandler; importar org.springframework.web.socket.server.handshakeIntercept; /** *Título: Handshake <br/> *Descrição: *@Empresa: Qingdao LitU Hi-Tech <br/> *@Autor: Liu Yunsheng *@Versão: v1.0 *@Desde: JDK 1.7.0_S80 *@Data: 3 de setembro, 2016 às 4:44:27 pm <br/>/Classhake Anteriormente, a Solicitação de ServerhttPrequest, servidorhttpResponse, websockethandler wshandler, map <string, objeto> atributos) lança a exceção {// TODO Método Auto-Generado Stub String JSPCode = ((ServLetServerHtPrETEter). // tag user // string userid = (string) session.getAttribute ("userID"); if (jspCode! = null) {attritutes.put ("jspcode", jspcode); } else {return false; } retornar true; } @Override public void AfterHandshake (Solicitação de servidorhttprequest, resposta serverhttproponse, websockethandler wshandler, exceção de exceção) {// TODO Método Auto-Generado}}}
(2) MyWebSocketConfig Classe de implementação
/** *Nome do projeto: Preço *Nome do arquivo: mywebsocketconfig.java *Nome do pacote: com.yun.webSocket *Data: 3 de setembro de 2016 às 16:52:29 *Copyright (c) [email protected] Todos os direitos reservados. */ pacote com.yun.webSocket; importar javax.annotation.resource; importar org.springframework.tereotype.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/> *Descrição: *@Companhia: Qingdao Litu Hi-Tech <br/> *@Autor: Liu Yunsheng *@versão: V1.0 *@Desde: JDK 1.7.0_80 *@Data: 3 de setembro, 2016 às 4:52:29 <br/> MyWebSocketConfig estende o webmvcConfigureRAdApter implementa WebSocketConfigurer {@Resource MyWebsockethandler Handler; @Override public void Registerwebsockethandlers (WebSocketHandlerRecistry Registry) {// TODO Método Auto-Generado Registry.addhandler (Handler, "/wsmy").addinterceptores(new handshake ()); Registry.addhandler (Handler, "/wsmy/sockjs").addinterceptores(new handshake ()). withsockjs (); }}
(3) MyWebsockethandler Implementation Class
/** *Nome do projeto: Preço *Nome do arquivo: mywebsockethandler.java *Nome do pacote: com.yun.webSocket *Data: 3 de setembro de 2016 às 16:55:12 *Copyright (c) [email protected] Todos os direitos reservados. */ pacote com.yun.webSocket; importar java.io.ioException; importar java.util.hashmap; importar java.util.iterator; importar java.util.map; importar java.util.map.entry; importar org.springframework.tereotype.component; importar org.springframework.web.socket.cloSestatus; importar org.springframework.web.socket.textMessage; importar org.springframework.web.socket.websockethandler; importar org.springframework.web.socket.websocketmessage; importar org.springframework.web.socket.websocketsession; importar com.google.gson.gsonbuilder; /** *Título: Mywebsockethandler <br/> *Descrição: *@Companhia: Qingdao Litu Hi-Tech <br/> *@Autor: Liu Yunsheng *@Versão: V1.0 *@Desde: JDK 1.7.0_80 *@Data: 3 de setembro, 2016 às 4:55:12 pm <br/> Mapa final estático <string, websocketSession> userocketSessionMap; static {usersocketSessionMap = new Hashmap <String, WebsocketSession> (); } @Override public void AfterConnectionEstabled (WebSocketSession) lança Exceção {// TODO Método Auto-Gerado Stub String jspCode = (String) session.gethandshakeattributes (). Get ("jspcode"); if (uservaSocketSessionMap.get (jspCode) == null) {usersocketSessionMap.put (jspcode, sessão); } para (int i = 0; i <10; i ++) {// Broadcast (novo textMessage (new GsonBuilder (). Create (). Tojson ("/" Number/":/"+i+"/" ")); session.sendMessage (new textMessage (new GsonBuilder (). }} @Override public void handleMessage (sessão websocketSession, websocketmessage <?> Mensagem) lança a exceção {// TODO Method Auto-Generated Stub // Mensagem 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 (mensagem); } @Override public void HandleTransportTerRor (sessão WebSocketSession, Exceção de Throwable) lança exceção {// TODO Method Method Stub if (session.isopen ()) {session.close (); } Iterador <entrada <string, websocketSession >> it = ususerocketSessionMap .EntrySet (). Iterator (); // Remova a sessão de soquete while (it.hasNext ()) {Entry <String, WebsocketSession> Entry = it.Next (); if (Entry.getValue (). getId (). Equals (session.getId ())) {usersocketSessionMap.remove (Entry.getKey ()); System.out.println ("Setores de soquete foi removida: ID do usuário" + entradas.getKey ()); quebrar; }}} @Override public void AfterConnectionClosed (Sessão de WebSocketSession, Rosestatus rosestatus) lança exceção {// TODO Method Auto-Gerated Stub System.out.println ("WebSocket:" + session.getId () + "Close"); Iterator <entradas <string, websocketSession >> it = ususerocketSessionMap .EntrySet (). Iterator (); // Remova a sessão de soquete while (it.hasNext ()) {Entry <String, WebsocketSession> Entry = it.Next (); if (Entry.getValue (). getId (). Equals (session.getId ())) {usersocketSessionMap.remove (Entry.getKey ()); System.out.println ("Setores de soquete foi removida: ID do usuário" + entradas.getKey ()); quebrar; }}} @Override public boolean SupportSpartialMessages () {// TODO Método Gerado Auto-Generado Return Return; } / ** * BULK * @Title: Broadcast * @Description: TODO * @param: @param mensagem * @param: @throws ioexception * @return: void * @author: liU yunsheng * @date: 4:23:30 em 10 de setembro, 2016 * @Throws * / public void WebsocketSession >> it = ususerocketSessionMap .EntrySet (). Iterator (); // Multithreading em massa enviando while (it.hasnext ()) {entrada final <string, websocketSession> entradas = it.next (); if (Entry.getValue (). ISOPEN ()) {new Thread (new Runnable () {public void run () {try {if (Entry.getValue (). Isopen ()) {Entry.getValue. }}}} / ** * Envie uma mensagem para a página de inspeção de engenharia em tempo real de todos os usuários on-line * * @param mensagem * @throws ioexception * / public void sendMessageTOJSP (mensagem final textMessage, string) lança IoException {iterator <string <string, websocketsSession >> itsocketsmsmet. // envio de massa multithreaded while (it.hasnext ()) {entrada final <string, websocketSession> entradas = it.next (); if (Entry.getValue (). ISOPEN () && Entry.getKey (). }).começar(); }}}}}}
2. Crie uma recepção para o processamento de handshake da WebSocket
<Cript> var path = '<%= Basepath%>'; var userID = 'lys'; if (userID ==-1) {window.Location.href = "<%= bashEpath2%>" rel = "Nofollow externo"; } var jspCode = userID+"_ aaa"; var websocket; if ('websocket' na janela) {websocket = new websocket ("ws: //" + path + "wsmy? jspcode =" + jspcode); } else if ('mozwebsocket' na janela) {websocket = new mozwebsocket ("ws: //" + path + "wsmy? jspcode =" + jspCode); } else {websocket = new Sockjs ("http: //" + path + "wsmy/sockjs? jspcode =" + jspCode); } websocket.onopen = function (event) {console.log ("websocket: conectado"); console.log (evento); }; websocket.onMessage = function (event) {var data = json.parse (event.data); console.log ("WebSocket: recebeu uma mensagem -Norm", dados); Alert ("WebSocket: recebeu uma mensagem"); }; websocket.onerror = function (event) {console.log ("websocket: erro ocorreu"); console.log (evento); }; websocket.onclose = function (event) {console.log ("websocket: close"); console.log (evento); } </script>3. WebSocket Background Push através da chamada do controlador
/** *Nome do projeto: Preço *Nome do arquivo: GarlicPriceController.java *Nome do pacote: com.yun.price.garlic.controller *Data: 23 de junho de 2016 às 15:23:46 *Copyright (C) [email protected] Todos os direitos reservados. */ Package com.yun.price.garlic.Controller; importar java.io.ioException; importar java.util.date; importar java.util.list; importar javax.annotation.resource; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpSession; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.tereotype.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.servletRequestAttributes; importar org.springframework.web.servlet.modelandView; importar org.springframework.web.socket.textMessage; importar com.google.gson.gsonbuilder; importação com.yun.common.entity.datagrid; importar com.yun.price.garlic.dao.entity.arlicprice; importação com.yun.price.garlic.model.arlicpricemodel; importar com.yun.price.garlic.service.GarlicPRICERSERVICE; importação com.yun.websocket.mywebsockethandler; /** * Título: GarlicPriceController <br/> * Descrição: * * @Company: Qingdao litu hi-tech <br/> * @author: liu yunsheng * @version: v1.0 * @since: jdk 1.7.0_80 * @date: 23 de junho de 3:23:46. GarlicPriceController {@Resource MyWebsocketHandler MyWebsocketHandler; @RequestMapping (value = "GarlicPriceController/testWebSocket", Method = {requestMethod.Post, requestMethod.get}, Produces = "Application/json; charset = utf-8") @ResponsoBody Public Public String String () TEXTSOCLETM () Gsonbuilder (). Create (). Tojson ("/" número/":/"+"GarlicPriceController/testwebsocket"+"/" "))," aaa "); retornar" 1 ";}}
4. O pacote JAR usado
<Depencency> <PuerpId> org.springframework </frupidId> <ArtifactId> Spring-WebSocket </stifactId> <Version> 4.0.1.release </sipers> </dependency>
5. O ambiente de operação
Pelo menos tomcat8.0 ou superior, caso contrário, um erro poderá ser relatado
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.