Java中websocket消息推送的实现代码
一.服务层
packagecom.demo.websocket; importjava.io.IOException; importjava.util.Iterator; importjava.util.concurrent.ConcurrentLinkedQueue; importjavax.servlet.ServletContextEvent; importjavax.servlet.ServletContextListener; importorg.springframework.context.annotation.Configuration; importorg.springframework.web.socket.CloseStatus; importorg.springframework.web.socket.TextMessage; importorg.springframework.web.socket.WebSocketSession; importorg.springframework.web.socket.config.annotation.EnableWebSocket; importorg.springframework.web.socket.config.annotation.WebSocketConfigurer; importorg.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; importorg.springframework.web.socket.handler.TextWebSocketHandler; @Configuration @EnableWebSocket publicclasswebsocketListenerimplementsWebSocketConfigurer,ServletContextListener{ privateConcurrentLinkedQueue<WebSocketSession>sessions=newConcurrentLinkedQueue<WebSocketSession>(); privateWebSocketHandlerTesthandler; @Override publicvoidcontextDestroyed(ServletContextEventarg0){ //TODOAuto-generatedmethodstub } @Override publicvoidcontextInitialized(ServletContextEventarg0){ //TODOAuto-generatedmethodstub } @Override publicvoidregisterWebSocketHandlers(WebSocketHandlerRegistryregistry){ handler=newWebSocketHandlerTest(); registry.addHandler(handler,"/ws/notifymessage.ws"); registry.addHandler(handler,"/ws/sockjs/notifymessage.ws").withSockJS(); newThread(handler).start(); } classWebSocketHandlerTestextendsTextWebSocketHandlerimplementsRunnable{ @Override publicvoidafterConnectionClosed(WebSocketSessionsession,CloseStatusstatus)throwsException{ sessions.remove(session); } @Override publicvoidafterConnectionEstablished(WebSocketSessionsession)throwsException{ sessions.add(session); } @Override protectedvoidhandleTextMessage(WebSocketSessionsession,TextMessagemessage)throwsException{ super.handleTextMessage(session,message); } @Override publicvoidrun(){ System.out.println("等待推送...."); try{ inti=0; for(;;){ synchronized(this){ try{ Thread.sleep(3000); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } if(i%10==0){ nofity("消息推送测试......"); System.out.println("推送消息了...."); }else{ System.out.println("本次不推送消息了...."); } i++; } }catch(IOExceptione){ e.printStackTrace(); System.out.println("失败...."); } } privatevoidnofity(Stringmessage)throwsIOException{ Iterator<WebSocketSession>iterator=sessions.iterator(); while(iterator.hasNext()){ WebSocketSessionsession=iterator.next(); synchronized(session){ if(session.isOpen()){ session.sendMessage(newTextMessage(message)); }else{ iterator.remove(); } } } } } }
二.前台界面监听
<!DOCTYPEhtml> <html> <head> <metacharset="UTF-8"> <title>Inserttitlehere</title> </head> <body> websocket测试界面 </body> <scripttype="text/javascript"> varwebsocketPath="localhost:8080/demo-web"; if('WebSocket'inwindow){ websocket=newWebSocket("ws://"+websocketPath+"/ws/notifymessage.ws"); }elseif('MozWebSocket'inwindow){ websocket=newMozWebSocket("ws://"+websocketPath+"/ws/notifymessage.ws"); }else{ websocket=newSockJS("ws://"+websocketPath+"/ws/notifymessage.ws"); } websocket.onopen=function(evnt){ }; websocket.onmessage=function(evnt){ console.log(evnt); }; websocket.onerror=function(evnt){ }; websocket.onclose=function(evnt){ } </script> </html>
注意web.xml中配置DispatcherServlet控制器
spring-servlet.xml空文件
<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.ws</url-pattern> </servlet-mapping>
以上所述是小编给大家介绍的Java中websocket消息推送的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!