当前位置: 首页 > 知识库问答 >
问题:

确定一个netty客户端。ctx.Write(obj)和ctx.channel()之间的区别。写(obj)

丘智志
2023-03-14

想知道是不是一样(在my handler . message received(channelhandler context 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个答案

蒯硕
2023-03-14

区别在于,ctx.write(…)将在上下文上启动写入,这意味着只有前面的ChannelOutboundHandler才会看到写入,而channel.write(..)将在ChannelPipeline的尾部开始,因此所有ChanneloutboundHangler都会看到写入。你最有可能使用前者。

 类似资料:
  • 问题内容: 我注意到ctx在处理程序之间是不同的,即使这些处理程序位于同一管道中,例如 在MyHander1中 在MyHandler2中 和输出: 我注意到ctx不同,但频道相同 所以在调用ctx.write()和ctx.channel()。write()之间有什么区别吗? 问题答案: 是的,有… Channel.write(..)始终从ChannelPipeline的尾部开始,因此通过所有Cha

  • 我注意到ctx在处理程序之间是不同的,即使这些处理程序在相同的管道中,例如 在MyHander1中 那么调用ctx.write()和ctx.channel().write()有什么区别吗?

  • 我需要让客户能够建立许多连接。我使用Netty 4.0。不幸的是,所有现有的示例都没有显示如何创建大量连接。 这是正确的决定吗?还是会更好?

  • 我刚刚把我的Netty 3软件转换成5,我遇到了一个问题。只有一个客户,一切都很好。我可以使用两个解码器(它们可以正常切换)并允许我登录。 当我尝试连接另一个客户端时,无论第一个客户端是否仍然连接,都会出现问题。第一个客户端保持连接绝对正常,但第二个客户端根本无法连接(不通过第一个解码器)。 这是我的引导程序: 第一解码器: http://pastebin.com/9FWzXSVE 第二个解码器:

  • 我正在努力与Netty 4.0.8网络套接字客户端示例和SSL,我似乎无法将数据发送到Netty SSL网络套接字服务器示例。尽管围绕这个问题已经有很多帖子了,(我相信我已经浏览了所有的帖子),最常见的建议是在管道的开头添加一个sslHandler,但它不起作用。握手似乎是成功的,因为它也表明了一个相关的问题在这里。 我记得4.0版的情况也一样。0,但我还是设法让它工作了。然而,当我升级到4.0时

  • 客户端要做的是: 连接服务器 发送信息 发送的每个信息,等待和接收从服务器返回的同样的信息 关闭连接 用 ChannelHandler 实现客户端逻辑 跟写服务器一样,我们提供 ChannelInboundHandler 来处理数据。下面例子,我们用 SimpleChannelInboundHandler 来处理所有的任务,需要覆盖三个方法: channelActive() - 服务器的连接被建立