Netty,Tomcat线程模型

4

我是一个新手,如果我的问题对于有经验的Netty和Tomcat用户来说似乎太幼稚了,那么我很抱歉。

我正在运行一个Netty WebSocket服务器(使用示例代码并在端口8090上运行),通过Spring在Tomcat内部配置(在端口8080上运行)。我试图理解两者的线程模型以及整体如何工作。

据我了解,Tomcat默认设置maxThreads = 200(活动线程的最大数量)。 而Netty使用boss线程创建和连接/绑定套接字,然后将其传递给工作线程,进行实际的异步I/O操作。

现在我正在尝试理解:

  • Netty使用的线程是否会从Tomcat池中取出,并因此减少活动线程的数量?

  • 对于每个WebSocket连接,是否会分配和使用单独的线程(虽然我对WebSocket实现不是很清楚,但我认为答案应该是否定的)。

  • 总的来说,这会影响同时连接到Web应用程序和WebSocket服务器的客户端数量吗?

编辑:

因此,在编写WebSocket服务器时,是否有任何特定的要点需要注意?

1个回答

5
在Netty中,您可以通过将Executor传递给构造函数来指定线程池。只要您不使用与Tomcat相同的池,就不会影响可用线程数。
Netty的Webseocket实现可以与其NIO传输一起使用。在这种情况下,您将在连接之间共享一些线程。因此,从连接到线程没有1:1的映射关系。

关于第一部分 - 如果通过 Executors.newCachedThreadPool() 声明线程池,我理解它将是一个不同的线程池,对吗?至于第二部分,您能否再详细解释一下? - Rndm
1
如果您的服务器使用NioServerSocketChannelFactory,则Netty默认会使用2 * Runtime.getRuntime().availableProcessors()个工作线程来处理连接。传入的连接在这些线程之间负载平衡,并且除非您的管道中有执行处理程序,否则每个连接都保证在其生命周期内由同一个线程处理。 - johnstlr
@johnstlr:感谢回复。我是Netty的新手,想知道除了Netty API文档之外,哪里可以找到关于所有这些重要信息片段的好文档。Netty很棒,但我找不到好的文档,因此有许多基本问题。 - Rndm
我不确定它是否能回答你所有的问题,但一定要查看http://seeallhearall.blogspot.co.uk/2012/05/netty-tutorial-part-1-introduction-to.html。请注意,Netty 4.0即将有一些重大变化。 - johnstlr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接