我有一个新项目,我将第一次使用Netty(v4.0.4)。我将拥有一台拥有数万个连接客户端的服务器。服务器将向这些客户端发送命令,并应收到响应。
通过API和在线示例,我不确定如何从服务器的角度为客户建模。我已经将我的频道组织到各种频道组中,我可以发送命令。
我需要知道命令是否超时或是否返回错误代码。我可能还需要为每个客户端维护一个命令队列。我是否应该使用ScheduledExecutorService为每个命令设置超时处理程序,然后只在取消响应时取消Future?
将Channel子类化为封装此逻辑是不是一个好主意?或者我应该使用某种类型的会话存储并将逻辑放在我的入站通道处理程序中?
我确信这些方法会起作用,但它们看起来有点尴尬,我想确保我做得很顺利。
谢谢!
答案 0 :(得分:1)
要安排事件(例如超时),您可以访问ChannelHandlerContext的EventExecutor,以使用相同的线程池netty使用来安排任何任务。或者,您可以使用ReadTimeoutHandler来管理超时。发送命令时,需要将ReadTimeoutHandler添加到通道的管道中,并在收到响应时将其删除。
netty可以轻松地将每个连接数据或会话数据作为ChannelHandler对象的成员变量进行处理。在使用共享ChannelHander的情况下,还有一种使用附件将这些数据存储在ChannelHanderContext中的方法。这两种方法都记录在ChannelHandler界面中。
这些是我对自己的问题提出的答案,欢迎提出意见或更好的答案。