1.实现服务端与客户端之间的全双工通信,服务端可以主动向客户端发送消息
2.区分不同客户端
3.区分不同用户
4.区分前端框架
5.服务端对客户端的连接情况统计
6.通道隔离
7.认证健全
8.心跳机制
9.对接docker容器部署
10.实现万级别并发
主流框架分别有
Netty
Undertow
Jetty
Vert.x
Grizzly
spray-websocket
nodejs-websocket/Node.js
Go
由于开发语言限制,只对Netty、Undertow和Jetty进行了调研,听说Tomcat也有NIO了,但是由于不够轻量,就不考虑了
Netty(开源):异步,事件驱动,NIO,轻量级,性能优秀,稳定性好,内存占用低,快速开发且可维护,传输快(零拷贝)Undertow(红帽公司):NIO,轻量级,性能良好,稳定性好,内存占用略高Jetty(开源):不够轻量级直接Pass
最终考虑基于Netty框架进行开发
版本选择:Netty5基于AIO,使用了 ForkJoinPool,增加了代码复杂度,但是性能提升并不明显,已被官方遗弃,所以选择官方一直在维护的Netty4,更加稳定,基于NIO性能也足够优秀
对Netty的简单理解 先上两张Netty的架构图