自主研发异步通信框架Minma(支持长连接和短连接)
2017-08-09 13:54
260 查看
Minma是英文Minma Is Not Mina的简称
该框架采用Java NIO的核心技术,实现了基于事件驱动的多线程异步通信框架,支持常见的长连接(腾讯QQ)和短连接(http通信)
对于开发人员而言,所有的底层技术都是透明的,开发人员仅仅只需要处理业务逻辑,把复杂的NIO简化成了类似Java Swing事件驱动式的编程。
长连接实例图
具体通信流程
1.客户端连接服务端,服务端通过Selector接收到连接请求,将其socketChannel通道保存到通道集合,并触发客户端连接事件
2.客户端发送数据包请求到服务端,服务端将请求的SelectionKey压入“读消息生产者队列”,立即进入下一批Select
3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件
4.开发人员在onReaded事件编写逻辑代码,并且决定读入的数据包的去向(返回给客户端,还是结束)
5.若在onReaded事件里,开发人员决定数据包要返回到客户端,则将该SelectionKey压入写消息生产者队列
6.写消息消费者线程池中派遣一个就绪线程,将数据包写到客户端,并触发onWrited事件
这就完成了长连接的一次通信,在所有的通信中都是异步的,没有出现阻塞的地方
若要深入了解,请先了解Java NIO技术
短连接实例
和长连接相比,短连接唯一的区别就是,不需要保存客户端的通信通道
通信的节奏为:连接->读入->计算、逻辑->返回客户端->断开连接
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
服务端代码
客户端代码
运行结果
服务端
下面看看短连接Demo
服务端代码
客户端代码
运行结果
服务端
客户端
可以看到框架用起来还是非常方便的,开发人员完全看不到底层的通信,仅仅只需要编写事件逻辑代码即可。
该框架采用Java NIO的核心技术,实现了基于事件驱动的多线程异步通信框架,支持常见的长连接(腾讯QQ)和短连接(http通信)
对于开发人员而言,所有的底层技术都是透明的,开发人员仅仅只需要处理业务逻辑,把复杂的NIO简化成了类似Java Swing事件驱动式的编程。
长连接实例图
具体通信流程
1.客户端连接服务端,服务端通过Selector接收到连接请求,将其socketChannel通道保存到通道集合,并触发客户端连接事件
2.客户端发送数据包请求到服务端,服务端将请求的SelectionKey压入“读消息生产者队列”,立即进入下一批Select
3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件
4.开发人员在onReaded事件编写逻辑代码,并且决定读入的数据包的去向(返回给客户端,还是结束)
5.若在onReaded事件里,开发人员决定数据包要返回到客户端,则将该SelectionKey压入写消息生产者队列
6.写消息消费者线程池中派遣一个就绪线程,将数据包写到客户端,并触发onWrited事件
这就完成了长连接的一次通信,在所有的通信中都是异步的,没有出现阻塞的地方
若要深入了解,请先了解Java NIO技术
短连接实例
和长连接相比,短连接唯一的区别就是,不需要保存客户端的通信通道
通信的节奏为:连接->读入->计算、逻辑->返回客户端->断开连接
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
服务端代码
客户端代码
运行结果
服务端
下面看看短连接Demo
服务端代码
客户端代码
运行结果
服务端
客户端
可以看到框架用起来还是非常方便的,开发人员完全看不到底层的通信,仅仅只需要编写事件逻辑代码即可。
相关文章推荐
- 自主研发异步通信框架Minma(支持长连接和短连接)
- 自主研发异步通信框架Minma(支持长连接和短连接)
- 企业宝采用自主研发的 .NET Socket高性能即时通信框架
- OXM框架-自主研发【支持xml转bean】【bean转xml】【通过注解即可使用哦】
- OXM框架-自主研发【支持xml转bean】【bean转xml】【通过注解即可使用哦】
- 从此不求人:自主研发一套PHP前端开发框架(9)
- 一个基于VB.net的异步Socket网络TCP通信可防止任意一端意外终止TCP连接的类,。
- ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)
- 从此不求人:自主研发一套PHP前端开发框架(20)
- javascript 支持链式调用的异步调用框架Async.Operation
- 异步UDP通信框架,修正BeginReceiveFrom的10054错误
- 基于开源库tufao,一个C + +的异步 Web 框架,使用Qt的对象的通信系统(信号与槽)
- Netty学习:搭建一个简单的Netty服务(JAVA NIO 类库的异步通信框架)
- 【Android】自己写的轻量级安卓网络框架——能够控制网络连接,支持缓存
- Akka编写RPC通信框架,模拟Worker连接Master小案例
- 从此不求人:自主研发一套PHP前端开发框架
- 自主研发一套PHP前端开发框架(22)
- Socket.IO:支持WebSocket协议、用于实时通信和跨平台的框架
- TCP/IP通信程序设计的丰富多样性(长短连接、同步异步等)
- 从此不求人:自主研发一套PHP前端开发框架(31)搭建后台框架