一,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>
四,消息发布
@Controller public class NettyController { @RequestMapping("pushArr") public void getsoc() { System.out.println("给全部人员发送消息"); Socketio socketio = new Socketio(); socketio.pushArr("connect_msg", "今天下午2点开会"); } }