设为首页 收藏本站
查看: 579|回复: 0

[经验分享] tomcat comet&nio学习

[复制链接]

尚未签到

发表于 2017-1-24 07:38:47 | 显示全部楼层 |阅读模式
  1 实验了简单的comet例子,基于nio connector。
  tomcat的comet突破了传统的web请求处理流程,使用长连接,把客户端和服务端的交互抽象为一个连接,多次事件处理过程。
  2 放翁博客
  http://so.csdn.net/search?q=blog%3Acenwenchu79+comet&t=blog
  http://blog.csdn.net/cenwenchu79/article/details/5505310
  放翁web请求异步化处理的核心在于分离容器线程池和业务线程池,隔离不同的业务处理,防止服务质量差的业务影响了系统的稳定性。同时异步化处理引入了事件驱动机制。整个过程还是比传统的模式复杂很多。
  3 tomcat nio connector是典型的反应器模式实现,基于java nio的特性实现。
  在这个connector里面同样有acceptor,和jio类似,都是单线程无限循环接收用户连接。他们的不同点在于,nioconnector还多了一个poller(org.apache.tomcat.util.net.NioEndpoint.Poller),也就是反应器,基于selector实现,单线程轮询io就绪读写事件,事件就绪时,封装请求任务派发到线程池中(org.apache.tomcat.util.net.NioEndpoint.SocketProcessor---》org.apache.coyote.AbstractProtocol.AbstractConnectionHandler.process(SocketWrapper<S>, SocketStatus)-----》org.apache.coyote.http11.AbstractHttp11Processor.process(SocketWrapper<S>)————》org.apache.coyote.Adapter.service(Request, Response))。而jio connector则是acceptor接收到连接后,马上封装请求派发到线程池中。进入线程池后的处理逻辑,基本雷同。
  在一般的场景下面,web请求一旦连接创建,数据马上会过来,所以nio的优势并不大。
  关于servlet容器的阻塞io和非阻塞io的区别,此文中有类似的论述http://www.ibm.com/developerworks/cn/java/j-lo-jetty/:
  “这里需要注意的地方时,很多人认为监听 SelectionKey.OP_ACCEPT 事件就已经是非阻塞方式了,其实 Jetty 仍然是用一个线程来监听客户端的连接请求,当接受到请求后,把这个请求再注册到 Selector 上,然后才是非阻塞方式执行。这个地方还有一个容易引起误解的地方是:认为 Jetty 以 NIO 方式工作只会有一个线程来处理所有的请求,甚至会认为不同用户会在服务端共享一个线程从而会导致基于 ThreadLocal 的程序会出现问题,其实从 Jetty 的源码中能够发现,真正共享一个线程的处理只是在监听不同连接的数据传送事件上,比如有多个连接已经建立,传统方式是当没有数据传输时,线程是阻塞的也就是一直在等待下一个数据的到来,而 NIO 的处理方式是只有一个线程在等待所有连接的数据的到来,而当某个连接数据到来时 Jetty 会把它分配给这个连接对应的处理线程去处理,所以不同连接的处理线程仍然是独立的。
  也可参考http://blog.csdn.net/lxlzhn/article/details/7599536
  nio的使用场景
  http://www.oschina.net/question/53294_3870
  http://www.iteye.com/problems/13017
  http://my.oschina.net/jsan/blog/49697
  nio connector较适用于长连接场景,例如comet是基于nio的。
  或者是当针对每个连接,服务端都会有大量的线程阻塞在read上面的通信场景都适合,这样就可以充分发挥多路复用的功能

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332590-1-1.html 上篇帖子: 【转】tomcat配置大全 下篇帖子: tomcat 链接数据库超时
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表