• 技术文章 >Java >java教程

    在Java中通过websocket实现消息推送的实现代码详解

    黄舟黄舟2017-03-25 09:57:10原创2737
    这篇文章主要介绍了Java中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消息推送的实现代码详解的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    相关文章:

    微信开发消息推送实现技巧(附代码)

    一个基于WebSocket的WEB消息推送框架

    .NET 微信开发自动内容回复实例代码

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:详细介绍java中的文件操作总结 下一篇:Java生成验证码的代码实例详细介绍
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• JAVA接口与抽象类详细解析• Java基础之volatile详解• Java实现多线程的四种方式• Java中super关键字的用法详解• 归纳整理Java线程面试题
    1/1

    PHP中文网