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

Netty 4中有没有一种方法可以在connect上传递一个通道“Name/ID ”,我可以用它来进行服务器端注册?

阎丰羽
2023-03-14

背景:

我希望维护已连接通道的服务器端注册表,但我还需要此注册表由众所周知的名称/ID 进行 KEY-ed - 每个连接的通道是唯一的。

因此,我将使用字符串id作为每个连接通道的密钥(即客户端和服务器都知道它,但它不会是GUID)。

当客户端连接并调用服务器端处理程序的channelActive方法时,我想从ChannelHandlerContext中提取这个Channel ID并存储这个(ID,Channel)对。

当通道断开连接时——无论是由于客户端还是某些故障,我都将从映射中删除(ID,channel)对。

问题:

有没有办法在客户端Connect调用上传递应用程序数据,以便服务器端处理程序可以在其channelActive方法中读取这些数据?

我可以只在“连接时”执行此操作吗?我想避免将此逻辑添加到实际的消息处理中,因为这纯粹是为了通道连接/断开连接标识。

谢谢

共有1个答案

井修雅
2023-03-14

经过一些带外讨论,我更好地理解了connect仅用于建立endpoint之间的物理连接。直到通道上的第一次写入发生时,管道中的各种处理程序才被构造/使用。

因此,我将把它构建到我们的消息处理层中——使用客户端通道的channelActive方法来处理进行1次注册调用

 类似资料:
  • 我有一个文档,它包含一个数组,如下所示。这是第一份文件。 我需要在聚合框架中用nestedData数组中的_id查找(连接)到另一个集合。

  • 问题内容: 我有一个.csv文件,如下所示: 我必须从文件中删除重复的电子邮件(整行)(即,上面示例中包含的行之一)。如何仅在字段1(用逗号分隔)上使用?根据,没有列选项。 我尝试了一些东西,但是没有用。 问题答案: 为了独特 所以逗号是定界符 对于关键字段1 测试结果:

  • 问题内容: 我对Java 5注释有点陌生,我很好奇这两种方法是否可行: 此注释将为您生成一个简单的getter和setter。 该注解表明变量是粗野,空,这样你就不必每次都写样板代码。 这些都可以吗?如果可能的话,它们似乎是我要为其编写注释的第一件事。由于我在阅读文档时对这些内容了解不多,因此我假设注释并不是真正的含义。这里的任何方向将不胜感激。 问题答案: 注释处理发生在抽象语法树上。这是解析器

  • 我有一个具有不同步骤的表单,它们都共享相同的标题结构。 不同步骤中标题的唯一区别是标题中的措辞随步骤而变化。 我正在寻找这样做的方法: 在我的vue路由器中: 因此,当路由为form/step1时,我希望我的表单组件接收在我的子配置中设置的标题道具,如上所述,依此类推。 我希望避免在父组件中管理这些信息,也希望避免我的孩子将这些信息与事件(例如与父组件或使用vuex)进行通信。我正在vue路由器中

  • 问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)

  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),