【问题标题】:Representing clients connected to a netty server代表连接到 netty 服务器的客户端
【发布时间】:2013-08-14 23:31:25
【问题描述】:

我有一个新项目,我将第一次使用 Netty (v4.0.4)。我将拥有一台连接数以万计的客户端的服务器。服务器将向这些客户端发送命令并应接收响应。

查看 API 和在线示例,我不确定如何从服务器的角度对客户端进行建模。我已经将我的频道组织成各种ChannelGroups,我可以很好地发送命令。

我需要知道命令是否超时或是否返回错误代码。我可能还需要为每个客户端维护一个命令队列。我应该使用 ScheduledExecutorService 为每个命令设置超时处理程序,然后在/如果响应出现时取消 Future?

子类化 Channel 来封装这个逻辑会是个好主意吗?或者我应该使用某种类型的会话存储并将逻辑放在我的入站通道处理程序中?

我确信这些方法会奏效,但它们看起来有点笨拙,我想确保我以网络的方式做事。

谢谢!

【问题讨论】:

    标签: netty


    【解决方案1】:

    要安排一个事件(例如超时),您可以访问 ChannelHandlerContext 的 EventExecutor 来安排使用 netty 使用的相同线程池的任何任务。或者,您可以使用ReadTimeoutHandler 来管理超时。 ReadTimeoutHandler 需要在发送命令时添加到通道的管道中,并在收到响应时删除。

    每个连接的数据或会话数据很容易被 netty 作为 ChannelHandler 对象的成员变量处理。在使用共享 ChannelHander 的情况下,还有一种方法可以使用附件将这些数据存储在 ChannelHanderContext 中。这两种方法都记录在ChannelHandler 接口中。

    这些是我对自己的问题提出的答案,欢迎使用 cmets 或更好的答案。

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2019-09-11
      • 2012-12-05
      • 2020-06-26
      • 2018-09-29
      • 1970-01-01
      相关资源
      最近更新 更多