java 长连接 心跳_Netty实现服务端客户端长连接通讯及心跳检测

本文介绍了如何使用Netty框架实现Java长连接通信及心跳检测机制。通过事件驱动的多线程异步通信,实现了客户端与服务端的高效交互。在长连接示例中,详细阐述了连接、读写数据、处理逻辑和关闭连接的过程。同时,对比了短连接的不同之处,即不保存客户端通信通道。最后,提供了长连接和短连接的Demo代码,展示了Netty简化NIO通信的便捷性。
摘要由CSDN通过智能技术生成

Minma是英文Minma Is Not Mina的简称

该框架采用Java NIO的核心技术,实现了基于事件驱动的多线程异步通信框架,支持常见的长连接(腾讯QQ)和短连接(http通信)

对于开发人员而言,所有的底层技术都是透明的,开发人员仅仅只需要处理业务逻辑,把复杂的NIO简化成了类似Java Swing事件驱动式的编程。

长连接实例图

20180111001939278028.png

具体通信流程

1.客户端连接服务端,服务端通过Selector接收到连接请求,将其socketChannel通道保存到通道集合,并触发客户端连接事件

2.客户端发送数据包请求到服务端,服务端将请求的SelectionKey压入“读消息生产者队列”,立即进入下一批Select

3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件

4.开发人员在onReaded事件编写逻辑代码,并且决定读入的数据包的去向(返回给客户端,还是结束)

5.若在onReaded事件里,开发人员决定数据包要返回到客户端,则将该SelectionKey压入写消息生产者队列

6.写消息消费者线程池中派遣一个就绪线程,将数据包写到客户端,并触发onWrited事件

这就完成了长连接的一次通信,在所有的通信中都是异步的,没有出现阻塞的地方

若要深入了解,请先了解Java NIO技术

短连接实例

20180111001939291700.png

和长连接相比,短连接唯一的区别就是,不需要保存客户端的通信通道

通信的节奏为:连接->读入->计算、逻辑->返回客户端->断开连接

1.客户端连接服务端,服务端通过Selector接收到连接请求

2.客户端发送数据包请求到服务端,服务端将请求的SelectionKey压入“读消息生产者队列”,立即进入下一批Select

3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件

4.开发人员在onReaded事件编写逻辑代码,读入的数据包的去向始终是客户端

5.若在onReaded事件里,开发人员决定数据包要返回到客户端,则将该SelectionKey压入写消息生产者队列

6.写消息消费者线程池中派遣一个就绪线程,将数据包写到客户端,并触发onWrited事件

7.断开与客户端连接,触发onClientClose事件

若要深入了解,请先了解Java NIO技术

下面分别写2个Demo来看看

首先是长连接Demo

首先在classpath创建一个配置文件minma.xml

20180111001939310256.png

服务端代码

20180111001939351273.png

20180111001939377641.png

20180111001939394243.png

客户端代码

20180111001939402056.png

20180111001939410845.png

20180111001939418658.png

运行结果

服务端

20180111001939429401.png

20180111001939439167.png

下面看看短连接Demo

服务端代码

20180111001939447956.png

20180111001939455769.png

20180111001939460652.png

客户端代码

20180111001939469441.png

20180111001939476278.png

20180111001939485067.png

运行结果

服务端

20180111001939487997.png

客户端

20180111001939489950.png

可以看到框架用起来还是非常方便的,开发人员完全看不到底层的通信,仅仅只需要编写事件逻辑代码即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值