我正在尝试将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???
…
…
…
}
谢谢。
答案 0 :(得分:1)
你只需要打电话:
InputEvent event = ...
ChannelHandlerContext ctx = ....
ctx.write(event.getBuffer());
或者:
InputEvent event = ...
Channel channel = ....
channel.write(event.getBuffer());
答案 1 :(得分:0)
// Make a new connection.
ChannelFuture connectFuture =
bootstrap.connect(new InetSocketAddress(host, port));
// Wait until the connection is made successfully.
Channel channel = connectFuture.awaitUninterruptibly().getChannel();
// Get the handler instance to retrieve the answer.
FactorialClientHandler handler =
(FactorialClientHandler) channel.getPipeline().getLast();//get("your handler name")