我正在尝试构建一个基于Netty的UDP服务器,根据客户端订阅不断向不同的客户端发布事件(大约每秒500个事件)(在订阅设置之前交换一些UDP请求/响应消息)。 / p>
设计是由Java Executors创建一些生产者/消费者线程。生成消息后,消费者线程会将其写入UDP通道。
观察到服务器端只有一个EventLoop线程用于该UDP通道,并且它非常忙于将消息写入套接字,因此对第二个及以后客户端的订阅请求的响应非常慢。
所以想知道是否有任何方法为NIO UDP服务器端启用多个工作线程,以便一个或几个线程忙于将发布事件写入套接字,我们仍然有其他线程来处理新的客户端订阅请求而没有延迟。任何建议都非常感谢。
不过,服务器端的Netty处理程序非常简单:日志记录处理程序,解码器处理程序,编码器处理程序和订阅处理程序。答案 0 :(得分:0)
简短回答一般没有...因为Channel
总是绑定到一个EventLoop
,所以只有一个线程处理它。也就是说,如果您使用本机epoll传输(仅适用于Linux),您可以使用EpollChannelOption.SO_REUSEPORT
将多个Channel
绑定到由不同EventLoop
处理的同一端口,因此Thread
秒。