识别netty客户端。 ctx.Write(obj)和ctx.channel()之间的区别。写(obj)

时间:2014-10-12 14:45:32

标签: netty channel handshake

我想知道它是否相同(在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());
}

对不起,如果我表达自己的不好,我不是英国人。感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

区别在于ctx.write(...)将在上下文中开始写入,这意味着只有前面的ChannelOutboundHandler才能看到写入,而channel.write(...)将从尾部开始ChannelPipeline等所有ChannelOutboundHandler都会看到写入。你最想要使用前者。