我想知道它是否相同(在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());
}
对不起,如果我表达自己的不好,我不是英国人。感谢您的帮助:)
答案 0 :(得分:1)
区别在于ctx.write(...)将在上下文中开始写入,这意味着只有前面的ChannelOutboundHandler才能看到写入,而channel.write(...)将从尾部开始ChannelPipeline等所有ChannelOutboundHandler都会看到写入。你最想要使用前者。