BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #24294同步于 2013/2/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]java nio框架netty 与tomcat的关系

ouqi
2013/2/14镜像同步12 回复
最近在研究http异步客户端。 看到了一堆名词,servlet3.0,jetty,tomcat,HttpAsyncClient netty,mina nio,nio2.0,iocp等等。略混乱 我的问题就是:netty跟tomcat是同样的概念么? netty官方说是个框架,那他是否还需要web容器支持?如果我客户端使用netty,服务端使用tomcat也是能连上的吧?是不是可以用netty的客户端和服务端 直接替换掉HttpAsyncClient和tomcat? 自己整理的思路是: 1. 就IO而言:概念上有5中模型:blocking I/O,nonblocking I/O,I/O multiplexing (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX aio_functions)。 2. 然后呢 不同的操作系统对上述模型支持不同: unix支持io多路复用,不同系统叫法不同 :freebsd里面叫 kqueue;linux 是epoll。而windows: 2000的时候就诞生了IOCP支持最后一种异步I/O 3.java是一种跨平台语言,为了支持异步IO,诞生了nio,Java1.4引入的NIO 1.0是基于I/O复用的。在各个平台上会选择不同的复用方式。Linux用的epoll,BSD上用kqueue,Windows上应该是重叠I/O(肯定不是IOCP)。 NIO 2.0里终于有AIO了,Linux上用AIO,Windows上用IOCP,都支持了概念上的最后一种IOasynchronous I/O 4:然后基于jdk的nio ,不同公司出了一堆框架:apache mina ,jboss的netty,sun的grizzly。 这些都是直接封装传输层的tcp/udp。然后servlet3.0是基于传输层的,针对于http的。 tomcat和jetty都是web容器,对servlet3.0的api提供了不同的实现(实际也都是基于nio?) HttpAsyncClient这个就是异步的http客户端(实际上也是基于java nio) 我的问题就是:netty跟tomcat是同样的概念么? netty官方说是个框架,那他是否还需要web容器支持?如果我客户端使用netty,服务端使用tomcat也是能连上的吧?是不是可以用netty的客户端和服务端 直接替换掉HttpAsyncClient和tomcat?另外上述陈述部分有问题的请指出~ 问题略长..问题前后提了两遍=。= 谢谢各位了~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
aiquestion机器人#1 · 2013/2/14
=。=跪了。。 【 在 ouqi 的大作中提到: 】 : 最近在研究http异步客户端。 : 看到了一堆名词,servlet3.0,jetty,tomcat,HttpAsyncClient : netty,mina : ...................
ouqi机器人#2 · 2013/2/14
这你都看到了!主任帮帮我...我感觉我是完成不了村长任务了。。。 【 在 aiquestion 的大作中提到: 】 : =。=跪了。。
wolfFN机器人#3 · 2013/2/15
主任。。。 【 在 aiquestion (bless) 的大作中提到: 】 : =。=跪了。。
Keyone机器人#4 · 2013/2/15
压力很大。。
spidercoco机器人#5 · 2013/2/15
关心客户端 就好了。。LZ研究的比较 广泛。。。
aiquestion机器人#6 · 2013/2/15
妇联。。 【 在 wolfFN 的大作中提到: 】 : 主任。。。 :
wolfFN机器人#7 · 2013/2/15
大拿,赶紧回答问题啊,学习呢 【 在 aiquestion (bless) 的大作中提到: 】 : 妇联。。
aiquestion机器人#8 · 2013/2/15
不会啊,lz是我们组大拿。。。 【 在 wolfFN 的大作中提到: 】 : 大拿,赶紧回答问题啊,学习呢 :
hunterlee机器人#9 · 2013/2/15
你的思路挺乱的,尝试梳理一下。 先解释一下network server model: 最早的server一般都是多进程/多线程模型,来一个请求就生成一个线程去处理; 请求太频繁会导致产生太多的线程,造成线程切换的开销太大,所以就考虑限制线程总的数量,于是就有了线程池模型; 再后来,因为互联网应用带来的高并发问题(c10k),大家都去用epoll/iocp这种IO复用的东东,这些东西一般也成为noblocking io; 但是,如果直接使用epoll的话,代码会很难写(太多的回调,程序会支离破碎),所以就出现了mina/jetty这种东东,它包装了nio,提供了一种框架,用这个框架写network server,即能用到epoll这种东西的好处,写的代码也很简单; 所以,mina/jetty本身是和http web无关的,它只是提供了一种写network server的框架;你可以在mina之上自己实现一个web server; tomcat本身就是一个web server,它侧重的是简化web的开发。当然,tomcat内部也是需要有它自己的一套server model。我不太熟悉tomcat,但它出现的应该比mina早,所以以前的tomcat底层应该是线程池的处理方式,至于后来是否添加了nio的支持,我就不清楚了。 简单的(但不是很恰当的)一个类比,mina就对应于tcp/udp,tomcat对应的是http,它们是不同层面的东西。 【 在 ouqi 的大作中提到: 】 : 最近在研究http异步客户端。 : 看到了一堆名词,servlet3.0,jetty,tomcat,HttpAsyncClient : netty,mina : ...................