我正在寻找有关使用Netty实施测验服务器的一些理论建议。服务器的三个主要要求是:
服务器具有权威性,可控制测验的进度。例如,用户注册参加测验(如房间/大厅)。准备就绪后,服务器会逐步完成问题,并在经过一段时间或每个人都回答后继续进行下一个问题。
用户有十秒钟回答问题。他们回答问题所花费的时间以及他们剩余的时间对于测验很重要。参与测验的用户将在地理上不同(即通过WAN链接)。
必须是可扩展的,例如一个测验可能有10个问题和30个用户,而下一个可能有100个问题和1万个用户。
Netty会成为一个合适的解决方案吗? Netty上有什么好书吗?我在亚马逊上看不到任何Kindle书籍。任何人都可以提供有关第二点的任何建议或样本(特别是一个时间要求严格的客户端/服务器示例,将延迟/传输时间考虑在内)?
答案 0 :(得分:3)
不幸的是我不知道任何有关netty的书籍,但是在线文档以及JavaDocs和示例都非常好。以下是一些例子:
如果您想为数千个并发用户/连接提供服务,非阻塞I / O是您唯一的选择。 Java(和OS)无法有效处理数千个线程,阻塞I / O。 netty可以,而不会创建那么多线程。
netty与底层协议(TCP / IP或UDP)一样好。您无法解决网络延迟问题。例如。从美国发送数据包到欧洲大约需要150毫秒。
如果时间非常重要,您可能需要以某种方式同步时钟或使用中央时间源。查看ntp
您必须决定协议如何与服务器交互:
在netty中,避免复制字节数组(ChannelBuffer
/ ByteBuf
非常擅长)并创建太多垃圾
避免阻止网络工作线程中的I / O操作。监控使用多少工作线程,避免排队netty事件。