Netty和Tomcat的对比

createh52周前 (06-09)技术教程12

Netty和Tomcat的区别是什么?

简单介绍:

Netty、

Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

Tomcat

Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

区别:

Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。

现实中netty却因为高并发、传输快、封装好等原因比tomcat更受欢迎。

Netty为什么高并发的?

Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),它的并发性能得到了很大提高。

tomcat就是针对http层的,所以我建议http还是选择tomcat(或者其他成熟的http-server),并不是说netty不好,而是你的选择问题。

netty是一个网络组件,tcp,udp,http都可以弄,但是官方文档都是些hello wolrd级别的。如果你非常了解http结构,完全可以基于netty搞出一个比tomcat牛的http server。如果做tcp开发,netty不二之选!

现在高并发分布式网站架构一般采用nginx(前端负载均衡)+ Netty/Tomcat(HTTP)Netty是基于Java NIO开发的,而Tomcat是Apache下的针对HTTP的服务器项目,前者更像一个中间件框架,后者更像一个工具

Netty什么传输快?

Netty的传输快其实也是依赖了NIO的一个特性——零拷贝。

Netty针对这种情况,使用了NIO中的另一大特性——零拷贝,当它需要接收数据的时候,它会在堆内存之外开辟一块内存,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。

总结Netty性能高的原因:

  • 非阻塞IO

Netty采用了IO多路复用技术,让多个IO的阻塞复用到一个select线程阻塞上,能够有效的应对大量的并发请求

  • 高效的Reactor线程模型
  • 无锁化串行设计

串行设计:消息的处理尽可能在一个线程内完成,期间不进行线程切换,避免了多线程竞争和同步锁的使用

  • 高效的并发编程

Netty 的高效并发编程主要体现在如下几点

  1. volatile 的大量、正确使用
  2. CAS 和原子类的广泛使用
  3. 线程安全容器的使用

通过读写锁提升并发性能

零拷贝

相关文章

如何理解Nginx和Tomcat?

Nginx和Tomcat是两种常用的Web服务器,它们都可以用来提供Web服务,但在一些方面有所不同。Nginx是一个高性能的反向代理服务器和Web服务器,它主要用来处理静态资源的请求,比如图片、样式...

Vue脚手架安装,初始化项目,打包并用Tomcat和Nginx部署

1.创建Vue脚手架# 1.在本地文件目录创建my-first-vue文件夹,安装vue-cli脚手架: npm install -g vue-cli 安装过程如下图所示:创建my-first-vue...

【Nginx】Nginx 4种常见配置实例

本文主要介绍nginx 4种常见的配置实例。Nginx实现反向代理;Nginx实现负载均衡;Nginx实现动静分离;Nginx实现高可用集群;Nginx 4种常见配置实例如下:一、Nginx反向代理配...

前端_react项目从windows部署到centos

前言:从工程角度来讲,本地开发完就要把项目部署到生产环境,此过程的快慢也直接影响着整体的效率。所以也有很多人做持续集成的工作,例如:CI/CD/一键部署。但对于个人开发者而言,如果能有工具支撑是最好的...

Linux环境通过Dockerfile创建Tomcat镜像

简介: Docker通过读取Dockerfile里面的内容可以自动创建镜像(image),Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系。Docker程序将读...

tomcat+Nginx负载均衡对session处理2

上一节,我们把session的原理分析了一下,对缓存机制做了一个解释,引入我们的缓存机制memcached,同时也提到了一套开源的memcached管理方案Memcached Session Mana...