html5中文学习网

您的位置: 首页 > 网络编程 > java教程 » 正文

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

[ ] 已经帮助:人解决问题

一.服务层2Z3HTML5中文学习网 - HTML5先行者学习网

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@EnableWebSocketpublic 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();          }        }      }    }  }}

二.前台界面监听2Z3HTML5中文学习网 - HTML5先行者学习网

<!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控制器2Z3HTML5中文学习网 - HTML5先行者学习网

spring-servlet.xml空文件2Z3HTML5中文学习网 - HTML5先行者学习网

<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消息推送的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!2Z3HTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助