微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐