【问题标题】:Using Node.js + Socket.io on Heroku with multiple dynos在带有多个测功机的 Heroku 上使用 Node.js + Socket.io
【发布时间】:2016-07-08 19:06:15
【问题描述】:

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

例如:

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

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

【问题讨论】:

    标签: node.js heroku websocket socket.io dyno


    【解决方案1】:

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

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

    当玩家 B 加入游戏时,

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2013-01-23
      • 2023-03-24
      • 2014-06-16
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2016-03-25
      相关资源
      最近更新 更多