一,netty-socketio消息推送
1)在项目中常常涉及到消息推送的情况,消息推送要求的实时性,使用传统的方式已经不能满足需求了
2)使用netty-socketio做消息推送,实现步骤,加入jar包----->写启动,添加,通知,关闭工具类 -----> 设置依靠监听器启动 ----->页面引入js----->编写请求获取消息;
二,实现
1)映入依赖于js文件
<!-- 消息推送 --> ???<dependency> ????????<groupId>com.corundumstudio.socketio</groupId> ????????<artifactId>netty-socketio</artifactId> ????????<version>1.7.7</version> ???</dependency>
2)实现工具类
/* * netty-socketio工具类 * 启动、添加客户端 * 消息推送 * 关闭服务 */public class Socketio { ???????static SocketIOServer socketIOServer; ???/* ????* 添加客户端 ????*/ ???public void startSocketio() throws InterruptedException { ???????//配置 ???????Configuration conf = new Configuration(); ???????//指定要主机ip地址,这个和页面请求ip地址一致 ???????conf.setHostname("192.168.1.2"); ???????//指定端口号 ???????conf.setPort(9092); ???????//设置最大的WebSocket帧内容长度限制 ???????conf.setMaxFramePayloadLength(1024*1024); ???????//设置最大HTTP内容长度限制 ???????conf.setMaxHttpContentLength(1024 * 1024); ???????????????socketIOServer = new SocketIOServer(conf); ???????????????ConnectListener connect = new ConnectListener() { ???????????@Override ???????????public void onConnect(SocketIOClient client) { ???????????????System.out.println("添加"); ???????????} ???????}; ???????//添加客户端 ???????socketIOServer.addConnectListener(connect); ???????socketIOServer.start(); ???????????????//设置超时时间 ???????Thread.sleep(Integer.MAX_VALUE); ???????????????socketIOServer.stop(); ???} ???????/* ????* 全体消息推送 ????* @param type 前台根据类型接收消息,所以接收的消息类型不同,收到的通知就不同 ????* 推送的事件类型 ????* @param content ????* 推送的内容 ????*/ ???public void pushArr(String type,String content) { ???????//获取全部客户端 ???????Collection<SocketIOClient> allClients = socketIOServer.getAllClients(); ???????for (SocketIOClient socket : allClients) { ???????????socket.sendEvent(type, content); ???????} ???} ???????/* ????* 启动服务 ????*/ ???public void startServer() { ???????if (socketIOServer == null) { ???????????new Thread(new Runnable() { ???????????????@Override ???????????????public void run() { ??????????????????try { ???????????????????startSocketio(); ???????????????} catch (InterruptedException e) { ???????????????????e.printStackTrace(); ???????????????} ???????????????} ???????????}).start(); ???????} ???} ???????/* ????* 停止服务 ????*/ ???public void stopSocketio() { ???????if (socketIOServer != null) { ???????????socketIOServer.stop(); ???????????socketIOServer = null; ???????} ???} ???????}
3)监听器启动
public class SocketioLisener implements ServletContextListener{ ???@Override ???public void contextInitialized(ServletContextEvent sce) { ???????//启动Socketio服务 ???????Socketio socketio = new Socketio(); ???????socketio.startServer(); ???} ???????@Override ???public void contextDestroyed(ServletContextEvent sce) { ???????//关闭Socketio服务 ???????Socketio socketio = new Socketio(); ???????socketio.stopSocketio(); ???}}
3.1)xml配置
????<listener> ?????????<listener-class>lisener.SocketioLisener</listener-class> ????</listener>
三,页面
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>消息推送</title></head><body> ???</body><script type="text/javascript" src="js/socket.io.js"></script><script type="text/javascript" src="jquery-easyui-1.5.3/jquery.min.js"></script><script type="text/javascript"><!-- 实时从指定查看是否有消息 -->var socket = io.connect(‘192.168.1.2:9092‘);socket.on(‘connect_msg‘,function(data){ ???alert(data); ???var personInfo = JSON.parse(data); ???console.log(personInfo);});</script></html>
四,消息发布
@Controllerpublic class NettyController { ???@RequestMapping("pushArr") ???public void getsoc() { ???????System.out.println("给全部人员发送消息"); ???????Socketio socketio = new Socketio(); ???????socketio.pushArr("connect_msg", "今天下午2点开会"); ???}}
五,效果
netty-socketio消息推送
原文地址:http://www.cnblogs.com/hi-feng/p/8052724.html