如何解耦实时游戏架构

时间:2014-03-07 09:27:08

标签: html5 node.js real-time message-queue

我有一个实时的HTML5画布游戏,它运行在一个节点后端。玩家通过Websocket(socket.io)连接。问题是有时我需要部署新代码(例如修补程序)并重新启动服务器,但我不想断开播放器。

我的想法是将websocket服务器和应用程序服务器分成可单独部署的组件,并在中间添加一个消息队列以分离这两个组件。这样,如果应用程序服务器正在重新启动,那么只会有短暂的延迟,而消息会堆积起来但不会丢失任何内容。这是一个好策略吗?还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

基于websocket的应用程序很可能在没有用户注意到任何内容的情况下重新启动(my chat server for example就是这种情况)。

为了实现这一点,解决方案不是将websocket应用程序隔离并且永远不会重新启动。事实上,这将是非常乐观的(你确定你可以确保它的API永远不会改变吗?)。

解决方案

  1. 确保客户端在断开连接时重新连接(如果您使用socket.io进行网络广告,这是标准的)
  2. 使服务器在客户端启动的重新连接时向客户端询问其id(或会话ID)
  3. 保持应用程序的状态。这通常使用数据库完成。如果您的服务器没有除客户端之间的队列之外的其他状态(这有点不太可能),那么您可能会寻找现有的持久性队列实现,或者通过快速本地存储构建您自己的队列(想到redis)