我正在使用谷歌protobufs设计一个使用Netty的服务器。客户端连接到服务器,发送在非Netty工作线程中处理的请求(此单个工作线程处理来自所有客户端的请求),当处理完成时,我想将响应发送回原始客户端。
我想知道发送回复消息的最佳方式。
一种选择是让我的Netty通道处理程序实现一个回调接口,工作者线程可以在完成处理请求时调用,并在此回调方法中执行ChannelHandlerContext.write(...)
。
但这会导致多核CPU利用率低,因为请求的处理和对所有客户端的响应的protobufs的编码都将在一个单独的线程中执行。
有没有办法在我的Netty频道处理程序回调中将用户定义的事件发布到Netty线程,然后接收此事件并在Netty线程中对传出消息执行protobuf编码?
我尝试在我的处理程序中使用ctx.channel().pipeline().fireUserEventTriggered
并实现userEventTriggered(ChannelHandlerContext ctx, Object evt)
,但我无法让它工作。用户事件机制是否用于此目的?如果是,是否有人有一些示例代码?