【问题标题】:netty , tomcat threading modelnetty , tomcat 线程模型
【发布时间】:2012-07-12 22:43:21
【问题描述】:

我是这方面的新手,如果我的问题对于有经验的 netty 和 tomcat 用户来说似乎过于天真,我很抱歉。

我正在运行一个 Netty websocket 服务器(使用示例代码并在端口 8090 上运行)通过 spring 内部 tomcat 配置(在端口 8080 上运行)。我正在尝试了解两者的线程模型以及它的整体工作原理。

据我了解,tomcat by deafult 设置了maxThreads = 200(最大活动线程数)。 而 netty 使用老板线程来创建和连接/绑定套接字,然后将它们传递给工作线程,工作线程执行实际的异步 I/O。

现在我正在努力理解:

  • 如果 Netty 使用的线程将从 tomcat 池中取出,从而减少活动线程的数量)?

  • 对于每个 websocket 连接,都会分配和使用一个单独的线程(我对 websocket 的实现不是很清楚,尽管我认为这个问题的答案应该是否定的)。

  • 总的来说,它会如何影响同时连接到 webapp 和 websocket 服务器的客户端数量?

编辑:

因此,在编写 weboscket 服务器代码时,有哪些需要牢记的具体要点?

【问题讨论】:

    标签: tomcat websocket threadpool netty


    【解决方案1】:

    在 Netty 中,您通过将 Executor 传递给构造函数来指定 ThreadPool。因此,只要您不使用与 Tomcat 中相同的池,它就不会影响可用线程。

    Netty 的 Webseocket 实现可以与它的 NIO 传输一起使用。在这种情况下,您将在连接之间共享多个线程。所以从连接到线程不存在 1:1 的映射。

    【讨论】:

    • 关于第一部分 - 如果通过 Executors.newCachedThreadPool() 声明线程池,我知道这将是一个不同的池,对吧?第二部分,你能多说点吗?
    • 如果您的服务器使用 NioServerSocketChannelFactory,默认情况下,Netty 将使用 2 * Runtime.getRuntime().availableProcessors() 工作线程来处理连接。传入连接在线程之间进行负载平衡,除非您的管道中有执行处理程序,否则每个连接都保证在连接的整个生命周期内由同一线程处理。
    • @johnstlr :感谢您的回复。我是 netty 的新手,想知道除了 netty api 文档之外,我在哪里可以找到关于所有这些重要的 sn-ps 信息的好的文档。Netty 很棒,但我无法找到好的文档,因此有很多基本的问题。
    • 我不知道它是否会回答你所有的问题,但一定要看看seeallhearall.blogspot.co.uk/2012/05/…。请注意,Netty 4.0 中会有一些重大变化。
    猜你喜欢
    • 2020-10-05
    • 2019-06-09
    • 2018-07-28
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2013-03-09
    • 2012-01-25
    • 2016-01-01
    相关资源
    最近更新 更多