基于selector的源码分析和理解、思想和应用实践

2019-01-21 02:40:53来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

来自京东架构师(JAVA)欢迎关注我的微信公众号java2arch,更多技术文章可看。

一个连接请求connetion request过来,产生一个通道channel(包含并封装了connection),channel注册到selector的set集合环上,服务端主线程死循环while(true)获取channel(有事件的,如枚举可读、可写、连接、连接就绪),根据事件枚举switch分支判断,通过获取的channel读请求数据、写响应数据、发送心跳回应、记录日志等等。

 

客户端与服务端建立连接获得单个channel,可以读写数据。

 

精华思想:面对高并发的客户端连接和数据传输,服务端主线程不需要阻塞等待建立连接、读写数据等,通过注册通道事件驱动异步处理高并发的读写等操作。请求来了,先放到环形集合里,有读写数据了,告诉我我再来处理,在这之前,我可以干别的事情或休息,不是站着在门口干等。在进一步,主线程就是老板,来活了告诉老板,老板来了,可以分配给其他小厮做,这样效率和吞吐量就比老板一个人干要强多了吧。boss->woker模型,worker可以是线程池驱动的。netty.使用了事件驱动、异步、多线程高并发的技术和思想。另外呢,考虑引进AIO和零拷贝以及channe责任链式的处理handle和filter\chain机制,引入高效序列化、网络心跳保持防火墙开放技术、解决分包、粘包、丢包、以及安全的策略和机制。

 


原文链接:https://www.cnblogs.com/java-arch/p/10295210.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:常用开发环境搭建配置教程(OneStall)

下一篇:AES详解(Java实现)