软件编程
位置:首页>> 软件编程>> java编程>> Java中websocket消息推送的实现代码

Java中websocket消息推送的实现代码

作者:tianzhongshan  发布时间:2023-06-02 09:26:56 

标签:websocket,消息,推送

一.服务层


package com.demo.websocket;
import java.io.IOException;
import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.TextWebSocketHandler;
@Configuration
@EnableWebSocket
public class websocketListener implements WebSocketConfigurer, ServletContextListener{
 private ConcurrentLinkedQueue<WebSocketSession> sessions = new ConcurrentLinkedQueue<WebSocketSession>();
 private WebSocketHandlerTest handler;
 @Override
 public void contextDestroyed(ServletContextEvent arg0) {
   // TODO Auto-generated method stub
 }
 @Override
 public void contextInitialized(ServletContextEvent arg0) {
   // TODO Auto-generated method stub
 }
 @Override
 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
   handler = new WebSocketHandlerTest();
   registry.addHandler(handler, "/ws/notifymessage.ws");
   registry.addHandler(handler, "/ws/sockjs/notifymessage.ws").withSockJS();
   new Thread(handler).start();
 }
 class WebSocketHandlerTest extends TextWebSocketHandler implements Runnable{
   @Override
   public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
     sessions.remove(session);
   }
   @Override
   public void afterConnectionEstablished(WebSocketSession session) throws Exception {
     sessions.add(session);
   }
   @Override
   protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
     super.handleTextMessage(session, message);
   }
   @Override
   public void run() {
     System.out.println("等待推送....");
     try {
       int i = 0;
       for (;;) {
         synchronized (this) {
           try {
             Thread.sleep(3000);
           } catch (InterruptedException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
           }
         }
         if(i%10==0){
           nofity("消息推送测试......");
           System.out.println("推送消息了....");
         }else{
           System.out.println("本次不推送消息了....");
         }
         i++;
       }
     } catch (IOException e) {
       e.printStackTrace();
       System.out.println("失败....");
     }
   }
   private void nofity(String message) throws IOException {
     Iterator<WebSocketSession> iterator = sessions.iterator();
     while (iterator.hasNext()) {
       WebSocketSession session = iterator.next();
       synchronized(session){
         if(session.isOpen()){
           session.sendMessage(new TextMessage(message));
         }else{
           iterator.remove();
         }
       }
     }
   }
 }
}

二.前台界面监听


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
websocket测试界面
</body>
<script type="text/javascript">
var websocketPath = "localhost:8080/demo-web";
if ('WebSocket' in window) {
 websocket = new WebSocket("ws://"+websocketPath+"/ws/notifymessage.ws");
} else if ('MozWebSocket' in window) {
 websocket = new MozWebSocket("ws://"+websocketPath+"/ws/notifymessage.ws");
} else {
 websocket = new SockJS("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消息推送的实现代码网站的支持!

来源:http://www.cnblogs.com/tianzhongshan/archive/2017/02/13/6392752.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com