我正在尝试使用Heroku上的Node / SocketIO构建实时多人游戏,并且我不确定如何处理多个dynos以共享SocketIO连接数据。
例如:
在单动态环境中,这会相对简单。当玩家A执行一个动作时,它只会被发射到玩家B.当有多个动作时,它会如何工作?
答案 0 :(得分:1)
由于您无法选择(或知道)您要连接的Heroku dyno(web.1
,web.2
或web.n
),因此您需要找到另一个在许多动态游戏中传达游戏变化的方式。
执行此操作的一种方法是另外使用分布式消息传递服务来传达游戏中的更改。使用分布式publush-subscribe体系结构Player A可以将游戏中的动作发送到dyno 1,然后dyno 1将它们放在队列中。
当玩家B加入游戏时,Dyno 2可以订阅到游戏队列。现在,Dyno 2将从游戏中接收动作,然后能够通过套接字将它们发送给玩家B.
虽然这种方法的延迟不会像单个高性能服务器那样低,但如果您希望获得扩展和冗余的好处,可能需要这样的方法。
在Heroku上,您可以考虑使用Redis来实现此目的,因为Heroku提供了托管版本,并且它适用于低延迟应用程序。