Netty游戏服务器

时间:2012-05-31 19:04:33

标签: netty

我正在尝试为连接的客户端构建一个通用服务器。

该架构由4个主要组件组成

  • 有状态应用服务器
  • 无状态网关服务器
  • 客户排队
  • 系统和经纪人

流程

  1. 客户端连接到网关
  2. 网关接受将会话ID发送回客户端
  3. 客户端向网关发送消息
  4. 网关将请求写入消息/任务队列
  5. 守护程序读取队列中的消息并将它们转发到App Server的监听套接字
  6. App Servers通过其业务逻辑
  7. 运行消息
  8. App Server稍后会向客户端发送相关消息到网关队列
  9. 网关上的线程读取其入站队列中的消息,然后将消息发送回消息中标识的客户端。
  10. 网关维护客户端会话ID的映射到客户端套接字对象以将传入的消息转发到客户端套接字
  11. 我正在使用Java Netty作为网关。 App服务器也是Java。

    我很想说设计就像Mongrel2,但我并不完全确定。我想说这更像是城市飞艇的Helium边缘服务器设计(http://urbanairship.com/blog/2010/08/24/c500k-in-action-at-urban-airship/)

    我的问题是: - 使用线程从入站队列中读取消息,然后将它们转发给客户端是一个好主意吗?有没有更好的方法来处理这个?如何确保消息在不使用其他线程的情况下转到相应的客户端套接字?

1 个答案:

答案 0 :(得分:3)

您可以使用in-vm消息传递。这是netty game server(谨慎!我写的!),它已经使用了这种演员模型。它使用JetLang进行事件调度和会话,以记住与客户端的每个连接。虽然您的用例可能无法直接满足,但如果您查看jetserver的源代码并剥离自己的逻辑,您肯定会得到一些想法。

如果您注意到,即使无状态UDP也与会话绑定。