2021-05-06

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 的关系。









原文转载:http://www.shaoqun.com/a/723769.html

跨境电商:https://www.ikjzd.com/

斑马物联:https://www.ikjzd.com/w/1316

垂直电商:https://www.ikjzd.com/w/1450


为什么要把这两个看起来不是很搭的东西放在一起对比呢?首先它们两个都是网络编程框架和规范,而且通过我的观察,从API的设计、生命周期方法、处理流程等等方面,他们确实有太多相似的地方了,如果想要深入地学习Netty,那么对比着Servlet,一定能让你事半功倍。Servlet定义首先,广义上的Servlet是JavaEE的一种Web规范(类似aopalliance是面向切面编程的一种规范),其本身定义
欧麦:https://www.ikjzd.com/w/2085
首信易支付:https://www.ikjzd.com/w/1841
卖家网:https://www.ikjzd.com/w/1569
把腿架在肩上疯狂律动 小姨子要爱爱:http://lady.shaoqun.com/a/274597.html
老公嫌孩子太丑逼我离婚:http://www.30bags.com/a/251580.html
2018年12月亚马逊英国站台式化妆镜(Countertop Vanity Mirrors)数据报告:https://www.ikjzd.com/home/12890

No comments:

Post a Comment