一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2017-04-03 编辑:简简单单 来源:一聚教程网

一.服务层

 

 代码如下 复制代码

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 sessions =newConcurrentLinkedQueue();

  privateWebSocketHandlerTest handler;

  @Override

  publicvoidcontextDestroyed(ServletContextEvent arg0) {

    // TODO Auto-generated method stub

  }

  @Override

  publicvoidcontextInitialized(ServletContextEvent arg0) {

    // TODO Auto-generated method stub

  }

  @Override

  publicvoidregisterWebSocketHandlers(WebSocketHandlerRegistry registry) {

    handler =newWebSocketHandlerTest();

    registry.addHandler(handler,"/ws/notifymessage.ws");

    registry.addHandler(handler,"/ws/sockjs/notifymessage.ws").withSockJS();

    newThread(handler).start();

  }

  classWebSocketHandlerTestextendsTextWebSocketHandlerimplementsRunnable{

    @Override

    publicvoidafterConnectionClosed(WebSocketSession session, CloseStatus status)throwsException {

      sessions.remove(session);

    }

    @Override

    publicvoidafterConnectionEstablished(WebSocketSession session)throwsException {

      sessions.add(session);

    }

    @Override

    protectedvoidhandleTextMessage(WebSocketSession session, TextMessage message)throwsException {

      super.handleTextMessage(session, message);

    }

    @Override

    publicvoidrun() {

      System.out.println("等待推送....");

      try{

        inti =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("失败....");

      }

    }

    privatevoidnofity(String message)throwsIOException {

      Iterator iterator = sessions.iterator();

      while(iterator.hasNext()) {

        WebSocketSession session = iterator.next();

        synchronized(session){

          if(session.isOpen()){

            session.sendMessage(newTextMessage(message));

          }else{

            iterator.remove();

          }

        }

      }

    }

  }

}

 

二.前台界面监听

 

 代码如下 复制代码

Insert title here

websocket测试界面

 

注意web.xml中配置DispatcherServlet控制器

spring-servlet.xml空文件

 

 代码如下 复制代码

    spring

    org.springframework.web.servlet.DispatcherServlet

    

      contextConfigLocation

      /WEB-INF/spring-servlet.xml

    

    1

  

  

    spring

    *.ws

  

 

热门栏目