netty-socketio消息推送

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

五,效果

时间: 2024-10-29 19:42:42

netty-socketio消息推送的相关文章

Android 基于Netty的消息推送方案之概念和工作原理(二)

上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World.为了更好的理解Hello World中的代码,今天我来解说一下关于Netty中一些概念和工作原理的内容,假设你认为本篇文章有些枯燥.请先去阅读<Android 基于Netty的消息推送方案之Hello World(一)> ChannelEvent Netty是基于事件驱动的,就是我们上文提到的.发生什么事.就通知"有关部门". 所以.不难理解.我们自己的业务代码中,一定有跟这

Android 基于Netty的消息推送方案之对象的传递(四)

在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递.好在Netty本身已经给我们写好了这样的转换工具.ObjectEncoder和ObjectDecoder,下面我们介绍一个案例. 1. 我们构造一个用来传输的对象(JavaBean) [java] view plaincopy

Android 基于Netty的消息推送方案之字符串的接收和发送(三)

在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffer的东东. ChannelBuffer Netty中的消息传递,都必须以字节的形式,以ChannelBuffer为载体传递.简单的说,就是你想直接写个字符串过去,对不起,抛异常.虽然,Netty定义的writer的接口参数是Object的,这可能也是会给新上手的朋友容易造成误会的地方.Netty源码中,是这样

Android 基于Netty的消息推送方案之Hello World(一)

消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地去查询服务器.所以这个方案的弊端也是显而易见的,在轮询的频率较高时,服务器端的压力很大,通讯的流量也很大,并且大部分时间都是做的无用功. 长连接 长连接:客户端和服务端维持一个长连接,服务端在有信息推送的时候,借助这个连接把信息发送到客户端.这个方案的优点是信息推送的及时性很高,基本是实时的,并且除

Android 基于Netty的消息推送方案(一)

消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地去查询服务器.所以这个方案的弊端也是显而易见的,在轮询的频率较高时,服务器端的压力很大,通讯的流量也很大,并且大部分时间都是做的无用功. 长连接 长连接:客户端和服务端维持一个长连接,服务端在有信息推送的时候,借助这个连接把信息发送到客户端.这个方案的优点是信息推送的及时性很高,基本是实时的,并且除

如何使用Netty技术设计一个百万级的消息推送系统 原 荐

先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互. 最主要的工作就是要有一个系统来支持设备的接入.向设备推送消息:同时还得满足大量设备接入的需求. 所以本次分享的内容不但可以满足物联网领域同时还支持以下场景: 基于 WEB 的聊天系统(点对点.群聊). WEB 应用中需求服务端推送的场景. 基于 SDK 的消息推送平台. 技术选型要满足大量的连接数.同时支持双全工通信,并且性能也得有保障. 在 Java 技术栈中进行选型首先自然是排除掉了传统 IO. 那就

实现web消息推送的技术和采用长轮询corundumstudio介绍

实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推送消息到客户端. 有哪些可以实现web消息推送的技术: 不断地轮询(俗称“拉”,polling)是获取实时消息的一个手段:Ajax 隔一段时间(通常使用 JavaScript 的 setTimeout 函数)就去服务器查询是否有改变,从而进行增量式的更新.但是间隔多长时间去查询成了问题,因为性能和即

【netty】Netty系列之Netty百万级推送服务设计要点

1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发推送服务遇到的各种技术问题. 由于咨询者众多,关注点也比较集中,我希望通过本文的案例分析和对推送服务设计要点的总结,帮助大家在实际工作中少走弯路. 1.2. 推送服务

Netty系列之Netty百万级推送服务设计要点

原文:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points 1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发

消息推送学习一、原生Socket的使用

消息推送也是客户端和服务器连接然后进行交互的一种形式,但是不同于HTTP的连接,这种连接需要长时间的进行,当有消息时可以及时推送到客户端.除此之外还有多个用户,可能需要针对其身份进行不同的推送等等要求.而这种连接的形式在Java中可以使用Socket进行实现. 一.第一版: 1.首先是服务器部分,重要的操作说明 ①使用ServerSocket可以开启服务器上的一个端口进行连接监听,类似于服务器监听80端口. ②使用accept(),阻塞式的等待客户端的接入.接入成功时返回连接的Socket对象.