0

我正在尝试在 Heroku 上使用 Node / SocketIO 构建实时多人游戏,但不确定如何处理多个 dynos 以共享 SocketIO 连接数据。

例如:

  1. 我有 2 个 Heroku 测功机,每个都运行 Node + SocketIO
  2. 玩家 A 主持游戏,dyno 1 处理该连接
  3. 玩家 B 尝试加入同一个游戏,但由于 Heroku 路由器,dyno 2 最终处理了该连接。
  4. 游戏中的动作需要实时发生,所以当玩家 A 执行一个动作时,玩家 B 需要立即看到该动作的结果。

在单测功机环境中,这将相对简单。当玩家 A 执行一个动作时,它只是被发送给玩家 B。当有多个测功机时,这将如何工作?

4

1 回答 1

2

由于您无法选择(或知道)您要连接到哪个 Heroku dyno(web.1web.2web.n),因此您需要找到另一种方法来跨多个 dyno 传达游戏中的变化。

一种方法是额外使用分布式消息服务来传达游戏中的变化。使用分布式发布-订阅架构,玩家 A 可以将游戏中的动作发送到 dyno 1,然后将它们放入队列中。

当玩家 B 加入游戏时, Dyno 2 可以订阅游戏队列。现在,Dyno 2 将接收来自游戏的动作,然后能够通过套接字将它们发送给玩家 B。

虽然这种方法的延迟不会像单个高性能服务器那样低,但如果您想获得扩展和冗余的好处,可能需要类似的方法。

在 Heroku 上,您可能会考虑为此目的使用Redis,因为 Heroku 提供了托管版本,并且它在低延迟应用程序中表现良好。

于 2016-03-22T02:48:44.560 回答