返回信息流最近在研究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?另外上述陈述部分有问题的请指出~
问题略长..问题前后提了两遍=。= 谢谢各位了~
这是一条镜像帖。来源:北邮人论坛 / java / #24294同步于 2013/2/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]java nio框架netty 与tomcat的关系
ouqi
2013/2/14镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
=。=跪了。。
【 在 ouqi 的大作中提到: 】
: 最近在研究http异步客户端。
: 看到了一堆名词,servlet3.0,jetty,tomcat,HttpAsyncClient
: netty,mina
: ...................
你的思路挺乱的,尝试梳理一下。
先解释一下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
: ...................