当前位置: 移动技术网 > IT编程>开发语言>Java > Java中websocket消息推送的实现代码

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

一.服务层

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消息推送的实现代码,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网