我想知道它是否相同(在MyHandler.messageReceived(ChannelHandlerContext ctx,object msg)中调用它们)。
如果是一样的,我可以做以下操作吗:
1) 将频道添加到哈希图
@Override
protected void messageReceived(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
//In this handler we add the client to a hashmap
short id = msg.readShort();
AllClients.addClient(id, ctx.channel());
}
2) 在另一个客户端的其他处理程序中,向最后一个客户端发送消息:
protected void messageReceived(ChannelHandlerContext ctx, Message msg) throws Exception {
//In this handler we send a message to other client
short id = msg.readShort();
AllClients.getClient(id)
.getChannel()
.WriteAndFlush(id + "->" + Message.readString());
}
对不起,如果我表达得不好,我不是英国人。感谢您的帮助:)
不同之处在于ctx.write(…)将在上下文上开始写入,这意味着只有它前面的ChannelOutboundHandler才会看到写入,而channel.write(..)将在ChannelPipeline的尾部开始,因此所有ChannelOutoundHandler都会看到写入。你最想使用前者。