`
yuancihang
  • 浏览: 145382 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

netty vs jetty

nio 
阅读更多

对比版本netty4.1 , jetty9.3

 

1.socket连接处理

   jetty 使用AbstractConnector.Acceptor来处理连接, 线程数=Math.max(1, Math.min(4,cores/8)), 但是自己不new线程而是从共享的QueuedThreadPool中拿线程来执行

 

   netty 使用一个单独的NioEventLoopGroup来处理。 NioEventLoopGroup是一个Selector线程池, 其中每个NioEventLoop都表示一个Selector线程。 

         默认会初始化(cores*2)个NioEventLoop, 但是绑定一个端口只会使用一个NioEventLoop来处理该端口的所有连接

 

2.IO读写

  jetty 新来的SocketChannel会分配(SelectorManager.chooseSelector)一个ManagedSelector来监听IO数据(ManagedSelector.SelectorProducer.produce), 

        同时创建一个EndPoint对象来具体读写数据. 

        具体是通过SelectChannelEndPoint.fill读取IO数据,通过SelectChannelEndPoint.flush写入IO数据. 一个ManagedSelector内部有一个Selector实例可以注册多个SocketChannel,

 

  netty 使用一个单独的NioEventLoopGroup来处理, 新来的socketchannel根据一定的策略(GenericEventExecutorChooser or  

        PowerOfTowEventExecutorChooser)会分配一个NioEventLoop来处理IO读写并一直使用该NioEventLoop进行IO读写。 默认会初始化(cores*2)个NioEventLoop, 一个socketchannel的读写会在同一个NioEventLoop线程下处理

 

3.业务逻辑处理

  jetty 使用QueuedThreadPool 处理

  netty 需要用户自己实现线程池处理, 不推荐使用netty的IO读写线程池来处理业务逻辑

 

 

总结

  netty有一个处理客户端连接的线程池(parentGroup)(一般只会使用一个线程),一个处理IO读写的线程池(childGroup),同时需要用户自己实现一个处理业务逻辑的线程池

       Selector实例和线程是绑定在一起的表现为NioEventLoop, 也就是说一个NioEventLoop表示一个线程和一个Selector实例

 

  jetty有一个共享的线程池QueuedThreadPool,有一个共享的ManagedSelector(内部有一个Selector实例)池SelectorManager. 

       socket连接处理(长期占用死循环不退AbstractConnector.Acceptor.run),IO读写和业务逻辑处理共享同一个线程池QueuedThreadPool, 

       socket连接处理和IO读写共享同一个ManagedSelector池SelectorManager。默认 (cores+1/2)个ManagedSelector实例

分享到:
评论

相关推荐

    websocket+tomcat+jetty+netty

    总结来说,"websocket+tomcat+jetty+netty"这个主题涵盖了WebSocket协议及其在不同服务器框架中的实现。Tomcat、Jetty和Netty都是支持WebSocket的Java服务器平台,各有其优势和适用场景。理解这些技术可以帮助开发者...

    Netty_Jetty

    在IT领域,Netty和Jetty是两个非常重要的开源框架,尤其在开发高性能、高并发的网络应用时,它们都扮演着关键角色。Netty是一个用Java编写的异步事件驱动的网络应用程序框架,而Jetty则是一个轻量级的HTTP服务器和...

    Spring+Netty+WebSocket实例

    在现代Web开发中,实时通信已经成为一个不可或缺的功能,Spring、Netty和WebSocket的结合为构建高性能、低延迟的实时应用提供了强大的解决方案。本实例将详细探讨如何利用这三种技术进行集成,实现高效的双向通信。 ...

    springboot整合netty的demo

    它通过自动配置、内嵌Servlet容器(如Tomcat或Jetty)以及“起步依赖”来简化项目构建。在SpringBoot项目中,我们可以通过添加对应的依赖来引入Netty,例如在`pom.xml`中加入`spring-boot-starter-webflux`,这个...

    resteasy使用netty

    在传统Web应用中,我们通常会使用Servlet容器(如Tomcat、Jetty等)来托管我们的服务。这些容器会处理HTTP请求,并将它们转发给我们的应用程序。然而,这种方式可能会引入额外的性能开销,特别是在处理高并发请求时...

    springboot与netty整合

    通过内置的Tomcat或Jetty服务器,SpringBoot可以快速启动并运行Web应用。开发者只需关注业务逻辑,无需过多关注基础设施的配置。 Netty,另一方面,是一个高度可定制的NIO框架,提供了低级别的网络编程接口。它的非...

    springboot基础netty和websocket

    SpringBoot的特点包括零配置、自动配置、内嵌Web服务器(如Tomcat或Jetty)以及便捷的起步依赖。在本项目中,SpringBoot作为基础框架,提供了一个友好的环境来整合其他服务,如WebSocket。 Netty则是一个高性能、...

    spring boot 集成原生netty(非netty-io-socket)

    注意,Spring Boot默认的HTTP服务器是Jetty或Tomcat,为了使用Netty,你需要通过`server.type=undertow`或`server.type=netty`配置项来指定。 此外,你还可以通过Spring Boot的注解驱动编程模型来处理HTTP请求,...

    SpringBoot 整合 Netty 实战

    SpringBoot通过默认配置、嵌入式Servlet容器(如Tomcat或Jetty)以及自动配置特性,使得开发者能够快速地构建独立运行的、生产级别的Java应用程序。 Netty则是一个高性能、异步事件驱动的网络应用框架,用于快速...

    springboot+netty开发简易式游戏源码

    2. **内嵌Web服务器**:Spring Boot支持内嵌Tomcat或Jetty,无需额外部署。 3. **自动配置**:基于`@EnableAutoConfiguration`注解,Spring Boot会根据项目中的依赖自动配置相应的bean。 4. **运行独立**:可以直接...

    netty04.zip

    通过内嵌的Tomcat或Jetty服务器,自动配置特性以及“约定优于配置”的原则,SpringBoot极大地简化了项目的初始化和配置过程。 在本项目中,Netty被用作通信层,处理客户端的连接请求,接收和发送数据。Netty提供了...

    Springboot-Netty-Tcp-demo.zip

    Spring Boot由Pivotal团队维护,其核心特性包括自动配置、内嵌式Web服务器(如Tomcat或Jetty)、健康检查和Actuator监控。通过在项目中引入特定的起步依赖(starters),开发者可以轻松地添加所需的Spring功能,例如...

    netty服务端、客户端代码

    4. **NettyReactiveWebServerFactory**: 这是一个用于创建基于Netty的反应式Web服务器的工厂类,可以替代Tomcat或Jetty等传统Servlet容器。 通过以上介绍,我们可以看到Netty服务端和客户端的创建过程,以及Netty...

    使用netty的简单demo

    作为一个学Java的,如果没有研究过...如果你想知道Nginx是怎么写出来的,如果你想知道Tomcat和Jetty是如何实现的,如果你也想实现一个简单的Redis服务器,那都应该好好理解一下Netty,它们高性能的原理都是类似的。

    spring-boot-protocol:springboot功能扩展-netty动态协议,可以支持各种网络协议的动态切换(单端口支持多个网络协议)。支持mmap,sendfile零拷贝,http请求批量聚合

    可以替代tomcat或jetty. 导包后一个@EnableNettyEmbedded注解即用.2.支持http请求聚合, 然后用 select * from id in (httpRequestList). 示例:com.github.netty.http.example.HttpGroupByApiController.java3.支持...

    Netty、WebSocket、Spring代码案例研究 即时通讯

    1. **Spring Boot**:简化Spring应用的初始搭建及运行过程,内置Tomcat或Jetty服务器,便于快速部署。 2. **Spring WebSocket**:Spring提供WebSocket支持,包括消息发布/订阅模型(Stomp),简化了WebSocket服务器...

    Netty In Action.zip

    - **Web服务**:虽然Java有Jetty和Tomcat等服务器,但在某些特定场景下,Netty也能提供更优的性能。 5. **Netty的使用** - **编写服务器**:包括设置Bootstrap、配置ChannelOption、添加ChannelHandler等步骤。 ...

    使用netty快速开发web应用.zip

    通过 Netty,你可以构建轻量级的 Web 服务器,替代传统的 Servlet 容器,例如 Tomcat 和 Jetty,以满足对速度和资源消耗有特殊需求的应用。 三、Netty 快速开发 Web 应用 1. 创建 ChannelHandler:ChannelHandler ...

    Netty权威指南

    入门篇:Jetty简单应用入门;TCP粘包拆包;定位符和定长解码器; 中级篇:编解码技术和常用的序列化框架(protobuf /java/Marshalling) 高级篇:Http协议开发; Netty 协议栈开发(数据结构定义,消息编解码,握手...

Global site tag (gtag.js) - Google Analytics