Heroku SailsJS如何处理推送消息到具有更多dyno';在希罗库?

Heroku SailsJS如何处理推送消息到具有更多dyno';在希罗库?,heroku,push-notification,socket.io,sails.js,kue,Heroku,Push Notification,Socket.io,Sails.js,Kue,我有一个关于在Heroku上扩展SailJS应用程序的问题 设置: (Redis排队系统) 通过套接字io(sailsjs)连接的客户端 2个dyno(每个运行一个SailsJS实例) 这是一种过程 我想自主地运行一个连续的“cron”进程,该进程触发一条推送消息,该消息必须发送到连接的socketio客户端。 我知道正确配置后,套接字连接驻留在Redis中 我使用for nodejs,并触发一个worker来处理该任务。 worker位于SailsJS实例中,能够向连接的套接字客户端发送

我有一个关于在Heroku上扩展SailJS应用程序的问题

设置:

  • (Redis排队系统)
  • 通过套接字io(sailsjs)连接的客户端
  • 2个dyno(每个运行一个SailsJS实例)
  • 这是一种过程
我想自主地运行一个连续的“cron”进程,该进程触发一条推送消息,该消息必须发送到连接的socketio客户端。 我知道正确配置后,套接字连接驻留在Redis中

我使用for nodejs,并触发一个worker来处理该任务。 worker位于SailsJS实例中,能够向连接的套接字客户端发送推送消息

但我想知道,不是每个SailsJS实例(dyno)都有相同的连接套接字,对吗?换句话说,每个SailsJS实例是否都有相同的可用连接套接字客户端,或者dyno1是否有可能有一组连接的客户端,而另一个dyno是否有可能有另一组客户端

e、 g:


如何解决这个问题…:-D?

为潜在答案提供线索:

看来sails.js的人正在做这个!见:

我希望这些人能够启用“subscribers()”方法,使其以与“message()”相同的方式运行

在我看来,当“message()”方法使您能够向连接到另一个sails实例的客户端发送消息时,方法“subscribers()”应该返回连接到两个sails实例的订阅者(套接字id),或者知道某个实例是否能够知道某个特定的客户端是否已连接,这应该非常好


谢谢

我要做的是订阅一个套接字到它自己的房间(通常房间是用户Id)。这样,您就不需要跟踪套接字id(每个浏览器连接都会更改)。当我的应用程序的任何部分需要与连接“对话”时,它会向房间发出一条消息。这很好,因为它允许具有多个设备的用户接收相同的消息(就像桌面和手机上有Skype一样,您可以互换使用其中任何一种设备进行聊天)

因此,用户A连接到桌面,我将他/她的套接字1235订阅给他/她的房间用户A。如果用户A同时与电话连接,我会向房间用户A订阅插座4567。如果任何工作人员需要发送消息,它会发送给房间用户a。您可以使用socket.io-emitter:

编辑

另外,请记住,Sails具有
广播
功能:

您可以向房间发送消息。如果您的消息是全局的,那么您可以让所有套接字订阅一个全局文件室,任何Sails实例都可以与所有人通信。如果您仍然想跟踪单个套接字,您仍然可以使用我上面的技术,使用sails
广播
,而不是
socket.io发射器

Heroku Cloud => Cron                      => Kue (Redis)
             => Dyno 1 (SailsJS instance) => client 1
                                          => client 2
             => Dyno 2 (SailsJS instance) => client 3
                                          => client 4
var io = require('socket.io-emitter')({ "host" : REDIS_WEBSOCKET_HOST, "port" : REDIS_WEBSOCKET_PORT });

io.in("userA").emit("message", "Some message");