Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Heroku上使用Node.js+Socket.io和多个dynos_Node.js_Heroku_Websocket_Socket.io_Dyno - Fatal编程技术网

在Heroku上使用Node.js+Socket.io和多个dynos

在Heroku上使用Node.js+Socket.io和多个dynos,node.js,heroku,websocket,socket.io,dyno,Node.js,Heroku,Websocket,Socket.io,Dyno,我试图在Heroku上用Node/SocketIO构建一个实时多人游戏,但不确定如何处理共享SocketIO连接数据的多个动态 例如: 我有2个Heroku dynos,每个运行节点+SocketIO 玩家A主持游戏,dyno 1处理该连接 玩家B试图加入同一个游戏,但由于Heroku路由器,dyno 2最终处理了该连接。 游戏中的动作需要实时发生,因此当玩家A执行动作时,玩家B需要立即看到该动作的结果。 在单个dyno环境中,这将相对简单。当玩家A执行一个动作时,它只会被发送给玩家B。当有多个

我试图在Heroku上用Node/SocketIO构建一个实时多人游戏,但不确定如何处理共享SocketIO连接数据的多个动态

例如:

我有2个Heroku dynos,每个运行节点+SocketIO 玩家A主持游戏,dyno 1处理该连接 玩家B试图加入同一个游戏,但由于Heroku路由器,dyno 2最终处理了该连接。 游戏中的动作需要实时发生,因此当玩家A执行动作时,玩家B需要立即看到该动作的结果。
在单个dyno环境中,这将相对简单。当玩家A执行一个动作时,它只会被发送给玩家B。当有多个dyno时,这将如何工作?

因为你无法选择或知道你正在连接到web.1、web.2或web.n的Heroku dyno,你需要找到另一种方式来跨多个dyno交流游戏中的变化

实现这一点的一种方法是另外使用分布式消息服务来传达游戏中的变化。使用分布式publush subscribe体系结构,玩家a可以将游戏中的动作发送给dyno 1,dyno 1随后将它们放入队列中

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

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


在HeloCu上,你可以考虑使用这个方法,因为Helku提供了一个托管版本,它对于低延迟的应用程序性能很好。

< P>因为你不能选择或知道你连接到Web 1、Web 2、或Web.n的Heloku DyNO,你需要找到另一种方式来在许多DyNOS中改变游戏的变化。 实现这一点的一种方法是另外使用分布式消息服务来传达游戏中的变化。使用分布式publush subscribe体系结构,玩家a可以将游戏中的动作发送给dyno 1,dyno 1随后将它们放入队列中

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

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

在HeloCu上,您可以考虑为此使用,因为HeloCu提供托管版本,并且它对于低延迟应用程序性能良好。