确定一个 netty 客户端。 ctx.Write(obj) 和 ctx.channel().Write(obj) 的区别
Posted
技术标签:
【中文标题】确定一个 netty 客户端。 ctx.Write(obj) 和 ctx.channel().Write(obj) 的区别【英文标题】:Identify a netty client. Differences between ctx.Write(obj) and ctx.channel().Write(obj) 【发布时间】:2014-12-07 05:04:41 【问题描述】:我想知道它是否相同(在 MyHandler.messageReceived(ChannelHandlerContext ctx, object msg) 中调用它们)。
如果相同,我可以这样做吗:
1) 将 Channel 添加到 hashmap
@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】:不同之处在于 ctx.write(...) 将在上下文中开始写入,这意味着只有它前面的 ChannelOutboundHandler 会看到写入,而 channel.write(...) 将从尾部开始ChannelPipeline 等所有 ChannelOutboundHandler 都会看到写入。您最有可能使用前者。
【讨论】:
好吧,就我而言,我对使用 channel.write(..) 很感兴趣。感谢您的回答,它清楚而准确:)以上是关于确定一个 netty 客户端。 ctx.Write(obj) 和 ctx.channel().Write(obj) 的区别的主要内容,如果未能解决你的问题,请参考以下文章