3

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

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

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

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

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

谢谢!

4

1 回答 1

2

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

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

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

于 2013-08-14T15:31:25.870 回答