Servlet与Netty横向对比
为什么要把这两个看起来不是很搭的东西放在一起对比呢?首先它们两个都是网络编程框架和规范,而且通过我的观察,从API的设计、生命周期方法、处理流程等等方面,他们确实有太多相似的地方了,如果想要深入地学习Netty,那么对比着Servlet,一定能让你事半功倍。
Servlet定义
首先,广义上的Servlet是JavaEE的一种Web规范(类似aopalliance是面向切面编程的一种规范),其本身定义了web编程的基础接口。遵循Servlet规范的应用程序可以运行在任何Servlet容器中,其实就是我们常见的Web服务器如Tomcat、JBoss、Jetty等。同时Servlet规范也有一个同名的接口 -- Servlet接口,它定义了一个Servlet程序需要实现的方法。如下是javax.servlet-api-3.1.0.jar中定义的Servlet接口,可以看到有这三个生命周期方法:init、service、destroy,其中service方法定义了用来处理网络请求的业务逻辑(注意,这里不仅仅限于HTTP协议,也可以是FTP、STMP等)。
public interface Servlet {
// 如果重写了init方法,一般要在第一行调用super.init(config)
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
基于Servlet规范的应用程序其实可以响应所有类型的请求(不仅仅是HTTP,也可以是WebSocket、FTP等),但是在JavaEE中一般都是用来处理HTTP请求,所以Servlet接口有一个非常重要的实现类HttpServlet,我们熟知的Spring MVC框架中的派发器DispatcherServlet就是继承自HttpServlet的。 其它更详细的定义可以参考链接。
Netty定义
Netty是目前Java社区非常火热的网络通信框架,官网的定义是:Netty是一个基于异步事件驱动的高性能的网络应用程序框架。跟Servlet规范有对应的同名Servlet接口稍有不同,Netty的接口定义更复杂,如果非要选出一个的话,我觉得是Channel,它定义了比Servlet更加广泛的职能范围,不仅定义了I/O操作,还定义了处理请求的业务逻辑。
public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable<Channel> {
ChannelId id();
EventLoop eventLoop();
Channel parent();
ChannelConfig config();
boolean isOpen();
boolean isRegistered();
boolean isActive();
ChannelMetadata metadata();
SocketAddress localAddress();
SocketAddress remoteAddress();
ChannelFuture closeFuture();
boolean isWritable();
long bytesBeforeUnwritable();
long bytesBeforeWritable();
Unsafe unsafe();
ChannelPipeline pipeline();
ByteBufAllocator alloc();
@Override
Channel read();
@Override
Channel flush();
}
关于Netty更详细的资料可参考链接。
Servlet和Netty都有生命周期方法,而Tomcat/JBoss/Jetty 与 Netty/Mina 就像是 Servlet 与 OIO/NIO 的关系。
Servlet与Netty横向对比的更多相关文章
- 中国云运营商横向对比——IaaS服务对标
前言: 随着互联网行业的快速发展,云服务器的使用越来越普遍.中国的云服务器提供商数量也在增加,市场上有大大小小多家云服务器提供商.然而,为了在众多服务提供商中脱颖而出,国内云服务器运营商商也在不断的利 ...
- 转:【AI每日播报】从TensorFlow到Theano:横向对比七大深度学习框架
http://geek.csdn.net/news/detail/139235 说到近期的深度学习框架,TensorFlow火的不得了,虽说有专家在朋友圈大声呼吁,不能让TensorFlow形成垄断地 ...
- UNITY Serializer 序列化 横向对比
UNITY Serializer 序列化 横向对比 关于序列化,无论是.net还是unity自身都提供了一定保障.然而人总是吃着碗里想着锅里,跑去github挖个宝是常有的事.看看各家大佬的本事.最有 ...
- 横向对比分析Python解析XML的四种方式
横向对比分析Python解析XML的四种方式 在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜 ...
- 配置管理服务diamond和disconf横向对比
Diamond则是淘宝开源的一种分布式配置管理服务的实现 disconf是来自百度的分布式配置管理平台,包括百度.滴滴出行.银联.网易.拉勾网.苏宁易购.顺丰科技 等知名互联网公司正在使用! 对比项目 ...
- 【纯净软件】三款照片EXIF信息删除软件 Clear Exif、JPEG & PNG Stripper、Easy Exif Delete 非专业横向对比
商业软件:需支付费用后方可使用. 共享软件:需支付费用,但可以先免费试用(有使用期限.功能限制). 免费软件:无需支付费用,无使用期限,无功能限制. 纯净软件:无广告.无联网行为的免费软件. 自由软件 ...
- C“中断” 与 JS“异步回调” 横向对比
在底层C语言中,有一个非常重要而特别的概念,叫做“中断”.用比喻来说,我正在写着博客,突然我妈打个电话过来,我就离开了键盘去接电话了,然后写博客就中断了,我聊完电话回来再继续写.乍一听似乎并没有什么大 ...
- 国内5家云服务厂商 HTTPS 安全性测试横向对比
随着 Chrome.Firefox 等浏览器对 HTTPS 的重视,国内众多云服务厂商都相继提供 SSL 证书申购服务,但是大家有没有注意到一个细节,不同厂家申请的 SSL 证书,由于证书性能.功能差 ...
- Disconf 学习系列之Disconf 与 Diamond的横向对比(图文详解)
不多说,直接上干货! Disconf 学习系列之Disconf是什么? Disconf 是来自百度的分布式配置管理平台,包括百度.滴滴出行.银联.网易.拉勾网.苏宁易购.顺丰科技 等知名互联网公司正在 ...
随机推荐
- 树的遍历c/c++
先序遍历(递归) 1 void preOrderTraverase(TreeNode * r) 2 { 3 if(r) 4 { 5 printf("%d\t",r->_dat ...
- setScaledContents
ui->catchPhotoLabel_607->setPixmap(QPixmap::fromImage(*m_imageCatchtDefaultPhoto_607).scaled(Q ...
- 共享内存与存储映射(mmap)
[前言]对这两个理解还是不够深刻,写一篇博客来记录一下. 首先关于共享内存的链接:共享内存.里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离.释放共享内存. 共享内存的好处就是 ...
- R语言barplot ,掌握本篇的内容,基本的条形图都可以画了
本篇主要想复现文章中的一张图,原图来源(Antibiotic resistome and its association with bacterial communities during sewag ...
- SSAS表格模型
Analysis Services 是在决策支持和业务分析中使用的分析数据引擎 (Vertipaq) . 它为商业智能提供企业级语义数据模型功能 (BI) .数据分析和报告应用程序,如 Power B ...
- springboot源码解析-管中窥豹系列之自动装配(九)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- 最简单的,在win,linux中,用powershell,自动获取Let's Encrypt证书方法
powershell传教士原创 2020-04-12 Let's Encrypt证书有效期3个月,支持泛域名[*.你的网站.net].支持n天内(一般10天内就够用了),用脚本自动续期. 简介: 这个 ...
- Ubuntu 18.04下Intel SGX应用程序程序开发——获得OCALL调用的返回值
本文中,我们介绍在Enclave函数中调用不可信OCALL函数,并获得OCALL函数的返回值. 1. 复制SampleEnclave示例并建立自己的OcallRetSum项目 SampleEnclav ...
- Java 常见对象 05
常见对象·正则表达式 和 其他类 正则表达式的概述和简单使用 * A:正则表达式 * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则,有自己的特殊应用 * 作用: ...
- 键盘--扫描码--ASCII码--显示器上的字符
在上一篇,我讲了键盘操作会产生扫描码以及如何解析Pause键和Print Screen键的扫描码. 在这一篇,我会说清楚"键盘上的输入为什么会出现在显示器上". 极简版 我们敲击键 ...