我正在尝试将 Netty(版本 3.6.1.final)集成到我们当前的系统中,这样我就可以替换当前的 NIO 代码。
目前,我们有一个消息传递总线,其中事件排队等待其他侦听器处理,并将另一个事件放回总线上以进行进一步处理。
在我的 Netty 业务逻辑处理程序的 messageReceived() 方法中,我将向总线添加一个输入请求。我要传递的一件事是来自 Netty 事件消息的数据。
我认为我应该在这个 InputEvent 中传递 ChannelHandlerContext 以及接收到的数据/消息。这样最终在处理 OutputEvent 时,它可以使用最初传递的 ChannelHandlerContext 将处理后的数据发送回正确的 Netty Channel 上的请求客户端。
那么处理OutputEvent 的Output 任务如何与Netty 绑定呢?
我是否使用 ChannelHandlerContext 作为输入处理数据发出一些调用。我不想捆绑输出任务。
来自 Netty 处理程序的代码片段。
public void messageReceived(
ChannelHandlerContext ctx, MessageEvent e) {
byte[] message = (byte[])e.getMessage();
try {
data.add(message);
}
catch( IOException ioe )
{
logger.error(ioe);
}
InputEvent ie = new InputEvent( ctx, this, data.getBuffer() );
try {
bus.enqueue(ie);
}
catch( Exception ex )
{
logger.error(ex);
}
来自输出处理器的代码片段。
public void run() {
// note that the OutputEvent (event) is available here. This is not a Netty event.
ChannelHandlerContext ctx = event.getHandlerContext();
ClientChannel handler = event.getHandler();
// I need to send the data in event.getBuffer() back.
// Now what do I do here???
…
…
…
}
谢谢你。