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消息推送的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!