我是新手,正在学习Netty。我想开发一个服务器,接收来自最多两个客户端的请求,但每个客户端都将连续发送许多请求到服务器。服务器必须处理这些请求并响应给客户端。因此,我假设即使我配置了多个工作线程,由于只有2个活动连接,它可能也没有用处。工作线程会阻塞,直到它处理完并响应给客户端。那么,请告诉我如何处理这些问题。
如果我在工作线程中使用Threadpoolexecutor以多线程方式处理两个客户端的请求,是否高效?或者如果可以通过Netty框架实现,麻烦您告诉我如何做到这一点?
提前致谢...
如果我理解正确:您的客户(2)将发送许多消息,每个消息都意味着需要尽快从服务器获得答案。
可以看到两种选择:
答案进程很短(足够短,不会影响您想要达到的速率,这意味着1个线程能够为1个客户端提供所需的答案速度):那么您可以使用Netty(在服务器引导程序中为1个客户端设置1个工作线程)的标准线程。这是最短的路径。
答案过程不够短暂(速率将非常低,例如因为存在“长时间”进程,例如阻塞调用、数据库访问、文件写入等):那么您可以在Netty管道中为执行此类阻塞/长进程的通道处理程序添加一个线程池(组)。
以下是从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());
只需将一个带有特殊EventExecutorGroup的ChannelHandler添加到ChannelPipeline中。例如UnorderedThreadPoolEventExecutor(src)。
就像这样。
UnorderedThreadPoolEventExecutor executorGroup = ...;
pipeline.addLast(executorGroup, new MyChannelHandler());