`

NIO构架(转)

 
阅读更多

从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式(一)

如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty、Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式,并基于这种模式写了个小小网络服务器,压力测试了一下,效果还不错。废话不多说,先看看三者是如何使用NIO的。

Jetty Connector的实现

先看看有关类图:

其中:

SelectChannelConnector负责组装各组件

SelectSet负责侦听客户端请求

SelectChannelEndPoint负责IO的读和写

HttpConnection负责逻辑处理

在整个服务端处理请求的过程可以分为三个阶段,时序图如下所示:

阶段一:监听并建立连接

这一过程主要是启动一个线程负责accept新连接,监听到后分配给相应的SelectSet,分配的策略就是轮询。

阶段二:监听客户端的请求

这一过程主要是启动多个线程(线程数一般为服务器CPU的个数),让SelectSet监听所管辖的channel队列,每个SelectSet维护一个Selector,这个Selector监听队列里所有的channel,一旦有读事件,从线程池里拿线程去做处理请求

阶段三:处理请求

这一过程就是每次客户端请求的数据处理过程,值得注意的是为了不让后端的业务处理阻碍Selector监听新的请求,就多线程来分隔开监听请求和处理请求两个阶段。

由此可以大致总结出Jetty有关NIO使用的模式,如下图所示:

最核心就是把三件不同的事情隔离开,并用不同规模的线程去处理,最大限度地利用NIO的异步和通知特性

分享到:
评论

相关推荐

    从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式

    本文将从这三个框架中提炼出NIO构架网络服务器的经典模式,并逐一解析它们的核心机制。 首先,Jetty的NIO实现主要由以下几个关键组件组成: 1. **SelectChannelConnector**:负责整合各个组件,创建和管理连接。 2....

    基于Java平台的完整的WebGIS构架

    - **网络通信**:利用Java NIO (New I/O) 或其他网络编程技术实现高效的数据传输和通信协议处理。 #### 五、结论 基于Java平台的完整WebGIS架构为GIS的应用和发展提供了新的途径。通过利用Web技术和Java技术的优势...

    Java思维导图xmind文件+导出图片

    构架高性能的分布式架构 构建分布式架构最重要因素 CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究...

    使用netty+spring搭建游戏框架

    - **NIO(Non-blocking I/O)**:Netty基于Java NIO API构建,提供非阻塞的I/O操作,提高了系统资源利用率,尤其适合高并发场景。 - **EventLoop**:Netty的核心组件,负责处理I/O事件,将它们分发到相应的...

    something:他山之石,可以攻玉

    集合I/O多线程NIOjava基础知识点整理jvmspring 相关MYSQL分布式存储检索java源码学习集合Linkedlist详解Vector详解Stack详解Map构架HashMap详解HashMap put逻辑总结HashMap与HashTable比较HashSet介绍I/...

    java项目源码

    在Java项目源码中,你还会看到如何使用标准库中的类,如`java.util`、`java.io`和`java.nio`等。例如,`ArrayList`、`HashMap`等数据结构用于存储和管理数据,`File`类用于文件操作,`Socket`类则用于网络通信。这些...

Global site tag (gtag.js) - Google Analytics