确定一个脾气暴躁的客户.ctx之间的差异.Write(obj)和ctx.channel().Write(obj)



我想知道它是否相同(在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都会看到写入。你最想使用前者。

相关内容

  • 没有找到相关文章

最新更新