码迷,mamicode.com
首页 > Web开发 > 详细

netty-socketio消息推送

时间:2017-12-17 19:19:54      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:param   ppi   类型   connect   adl   request   var   pre   分享图片   

一,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点开会");
    }
}

五,效果

技术分享图片

netty-socketio消息推送

标签:param   ppi   类型   connect   adl   request   var   pre   分享图片   

原文地址:http://www.cnblogs.com/hi-feng/p/8052724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!