我正在尝试为始终连接的客户端构建通用服务器。
该架构由 4 个主要组件组成
- 有状态的应用服务器
- 无状态网关服务器
- 客户
- 排队系统和代理
工艺流程
- 客户端连接到网关
- 网关接受将会话 ID 发送回客户端
- 客户端向网关发送消息
- 网关将请求写入消息/任务队列
- 守护进程读取队列上的消息并将它们转发到应用服务器的侦听套接字
- 应用服务器通过其业务逻辑运行消息
- 应用服务器稍后会向客户端发送相关消息到网关队列中
- 网关上的线程读取其入站队列中的消息,然后将消息发送回消息中标识的客户端。
- 网关维护客户端会话 ID 到客户端套接字对象的映射,以将传入消息转发到客户端套接字
我正在使用 Java Netty 作为网关。应用服务器也是 Java 语言。
我很想说这个设计就像 Mongrel2,但我不完全确定。我想说这更符合 Urban Airship 的 Helium 边缘服务器设计 (http://urbanairship.com/blog/2010/08/24/c500k-in-action-at-urban-airship/)
我的问题是: - 使用线程从入站队列中读取消息,然后将它们转发给客户端是个好主意吗?有没有更好的方法来处理这个?