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

这篇文章主要介绍了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 sessions = new ConcurrentLinkedQueue(); 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 iterator = sessions.iterator(); while (iterator.hasNext()) { WebSocketSession session = iterator.next(); synchronized(session){ if(session.isopen()){ session.sendMessage(new TextMessage(message)); }else{ iterator.remove(); } } } } } }

二.前台界面监听

Insert title here websocket测试界面

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

spring-servlet.xml空文件

springorg.springframework.web.servlet.dispatcherServletcontextConfigLocation/WEB-INF/spring-servlet.xml1spring*.ws

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...