虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > Java中websocket消息推送的实现代码

Java中websocket消息推送的实现代码
类别:Java编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了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@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();
    }
    }
    }
    }
    }
    }

二.前台界面监听

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

相关热词搜索: websocket 消息推送