我打算在即将开展的项目中使用Netty.该项目将充当客户端和服务器.特别是它将建立和维护与各种服务器的许多连接,同时为其自己的客户提供服务.
现在,NioServerSocketChannelFactory的文档公平地指定了服务器端的线程模型 - 每个绑定的监听端口在整个过程中都需要专用的boss线程,而连接的客户端将在工作线程上以非阻塞的方式处理.具体来说,一个工作线程将能够处理多个连接的客户端.
但是,NioClientSocketChannelFactory的文档不太具体.这似乎也利用了boss和worker线程.但是,文档说明:
一个NioClientSocketChannelFactory有一个boss线程.它根据请求进行连接尝试.一旦连接尝试成功,boss线程就将连接的Channel传递给NioClientSocketChannelFactory管理的其中一个工作线程.
工作线程似乎也以与服务器案例相同的方式运行.
我的问题是,这是否意味着从我的程序到外部服务器的每个连接都会有一个专用的boss线程?如果我建立数百或数千个此类连接,这将如何扩展?
作为旁注.重新使用单个Executor(缓存线程池)作为ChannelFactory 的bossExecutor和workerExecutor是否有任何不良副作用?那么在不同的客户端和/或服务器ChannelFactory实例之间重新使用呢?这里有一些讨论,但我没有找到足够具体的答案.任何人都可以详细说明这个吗?
我正在构建一个基于 Java 的 Web 服务(使用 JSON 作为数据编码),它需要每秒处理多达 2,000 个 HTTP 请求。每个请求所需的处理几乎可以忽略不计(HashMap.put() 方法调用),解析 JSON 可能是主要的开销。
我想知道单个 High-Memory Quadruple Extra Large EC2 实例(68GB RAM、8 核、64 位)是否能够每秒处理多达 2,000 个 HTTP 请求?
我意识到一个确切的答案会很困难,我只是想知道这是否在可能性范围内,或者我是否在抽烟。
我目前正在使用SimpleWeb Web 框架,但我注意到它目前似乎没有得到维护。人们可以推荐替代的可嵌入 HTTP 服务器,它们非常适合这种高容量使用吗?