最近在研究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?另外上述陈述部分有问题的请指出~
问题略长..问题前后提了两遍=。= 谢谢各位了~
来自 <http://www.iteye.com/problems/92400>
#### A1
> 1. 1,2,3全中.
> 但是nio直接使用比较难用,所以有了mina,netty这些针对网络io部分(tcp/udp-传输层)的封装(nio也有非网络io部分),为了使nio更易用。
> http是应用层的协议。
> servlet3.0则是另外一种东西,不是对协议的封装,javaee6众多规范中的一个,但凡javaee6的实现(或者像tomcat这种web容器部分的实现),都会支持servlet3.0,servlet理论上可以支持多种应用层协议(不单单只是http),而servlet3.0以后提供的异步特性与javase提供的nio或aio无直接关系,就是使用bio一样可以实现servlet3.0中提供的异步特性。
> 异步只是一种概念,异步与否要看,上层使用的异步,而支持的下层完全可能是阻塞的。
> 2. netty跟tomcat是同样的概念么?
> 不是
> 3. netty官方说是个框架,那他是否还需要web容器支持?
> 不需要
> 4. 如果我客户端使用netty,服务端使用tomcat也是能连上的吧?
> 可以,比如客户端直接使用netty构造http协议与tomcat支持的servlet通信
> 是不是可以用netty 的客户端和服务端 直接替换掉HttpAsyncClient和tomcat?
> 不是很明白你的意思...netty的客户端和服务端、HttpAsyncClient、tomcat...三者之间似乎不存在关系...看你的通讯协议了
> 来自 <http://www.iteye.com/problems/92400>
#### A2
> 感觉是楼主搞混了netty和jetty。
> jetty是容器,和tomcat是同样的概念,但是具体实现不同。
> netty是socket框架,和MINA是同样的概念,但是具体实现不同。
> 来自 <http://www.iteye.com/problems/92400>
#### A3
> netty和mina属于NIO封装框架。Tomcat使用了相关的技术,但属于servlet容器。
> 来自 <http://www.iteye.com/problems/92400>
- 谁能举个通俗易懂的例子告诉我IAAS,SAAS,PAAS的区别?
- 服务器与容器
- 常见NIO框架
- Nginx/Apache 和Apache Tomcat 的区别
- tomcat结合nginx使用小结
- java nio框架netty 与tomcat的关系
- Nginx、Lighttpd与Apache的区别
- Apache vs Lighttpd vs Nginx对比
- 数据库
- mybatis
- MyBatis传入多个参数的问题
- MS
- JMS(Java消息服务)入门教程
- ActiveMQ
- JMS简介与ActiveMQ实战
- JMS-使用消息队列优化网站性能
- 深入浅出JMS(一)--JMS基本概念
- 深入浅出JMS(二)--ActiveMQ简单介绍以及安装
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- kafka
- zookeeper
- 集群与负载
- 单机到分布式集群
- 日志
- 从Log4j迁移到LogBack的理由
- 角色权限
- shiro
- Shiro的认证和权限控制
- Spring 整合 Apache Shiro 实现各等级的权限管理
- 安全
- basic
- Servlet、Filter、Listener深入理解
- filter与servlet的比较
- Servlet Filter