每个连接的Netty多线程

时间:2015-10-29 17:51:09

标签: multithreading netty

我是netty的新手。我想开发一个服务器,旨在接收来自可能很少(比如Max是2)客户端的请求。但是每个客户端都会不断向服务器发送许多请求。服务器必须处理此类请求并响应客户端。所以,在这里我假设即使我配置多个工作者,它也可能没有用,因为只有2个活动连接。工作线程再次阻塞,直到它处理并响应客户端。所以,请让我知道如何处理这些类型的问题。 如果我在工作线程中使用threadpoolexecutor以多线程方式处理两个客户端请求,它会有效吗?或者,如果它通过netty框架实现,请告诉我如何做到这一点? 提前谢谢......

2 个答案:

答案 0 :(得分:0)

如果我理解正确:您的客户(2)将发送许多消息,每个消息都意味着尽快从服务器发送消息。

可以看到2个选项:

  1. 安装过程很短(足够短,不能成为您想要达到的费率的问题,这意味着1个主题能够以1个客户的需要快速回复):那么您可以继续使用来自Netty的标准线程(一次一个客户端的1个工作线程)在服务器引导程序中设置。这是最短路径。

  2. answear流程的时间不够短(速度会很糟糕,例如因为有一个“长时间”的过程,比如阻塞调用,数据库访问,文件写入......):然后您可以在Netty管道中添加一个线程池(一个组),以便ChannelHandler执行这样的阻塞/长时间处理。

  3. 以下是从ChannelPipeline获取的API文档的摘录: http://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html

    // Tell the pipeline to run MyBusinessLogicHandler's event handler methods
    // in a different thread than an I/O thread so that the I/O thread is not blocked by
    // a time-consuming task.
    // If your business logic is fully asynchronous or finished very quickly, you don't
    // need to specify a group.
    pipeline.addLast(group, "handler", new MyBusinessLogicHandler());
    

答案 1 :(得分:0)

只需将带有特殊EventExecutorGroup的ChannelHandler添加到ChannelPipeline。例如UnorderedThreadPoolEventExecutor(src)。

类似这样的东西。

UnorderedThreadPoolEventExecutor executorGroup = ...;
pipeline.addLast(executorGroup, new MyChannelHandler());