我想知道是否可以在从相同的node-websocket-server应用程序实例运行的不同websocket“连接”上进行广播。想象一下一个具有多个会议室的聊天室服务器,它在单个node.js服务器进程中仅向特定于每个会议室的参与者广播消息。我已经成功实现了每个进程一个聊天室的解决方案,但我想将其带入一个新的高度。
您可能想尝试Push-it:http :
//github.com/aaronblohowiak/Push-It,它建立在Socket.IO之上。设计遵循贝叶协议。
但是,如果您需要使用redis pubsub的工具,则可以检查http://github.com/shripadk/Socket.IO-
PubSub
具体回答您的问题:您可以维护连接到websocket服务器的所有客户端的阵列。可能只是广播给这些客户的一部分?广播方法实际上是在后台进行的。node-
websocket-server / Socket.IO维护所有连接的客户端的数组,并循环遍历所有这些客户端,向每个客户端“发送”消息。代码要点:
// considering you storing all your clients in an array, should be doing this on connection:
clients.push(client)
// loop through that array to send to each client
Client.prototype.broadcast = function(msg, except) {
for(var i in clients) {
if(clients[i].sessionId !== except) {
clients[i].send({message: msg});
}
}
}
因此,如果您只想将消息中继到特定频道,则只需维护客户端订阅的所有频道的列表即可。这是一个简单的示例(仅用于入门):
clients.push(client);
Client.prototype.subscribe = function(channel) {
this.channel = channel;
}
Client.prototype.unsubscribe = function(channel) {
this.channel = null;
}
Client.prototype.publish = function(channel, msg) {
for(var i in clients) {
if(clients[i].channel === channel) {
clients[i].send({message: msg});
}
}
}
为了使其更容易使用EventEmitters。因此,在node-websocket-server /
Socket.IO中,查看在何处接收消息并解析消息以检查类型(订阅/取消订阅/发布),并根据类型发出带有消息的事件。例:
Client.prototype._onMessage = function(message) {
switch(message.type) {
case 'subscribe':
this.emit('subscribe', message.channel);
case 'unsubscribe':
this.emit('unsubscribe', message.channel);
case 'publish':
this.emit('publish', message.channel, message.data);
default:
}
}
监听应用程序的on(’connection’)中发出的事件:
client.on('subscribe', function(channel) {
// do some checks here if u like
client.subscribe(channel);
});
client.on('unsubscribe', function(channel) {
client.unsubscribe(channel);
});
client.on('publish', function(channel, message) {
client.publish(channel, message);
});
希望这可以帮助。
我在Amazon EC2中有多个应用程序实例,每个实例都运行几个工作进程。我希望每个工作进程都订阅一些通知(例如配置更改)。这个通知基本上应该是广播消息,这样一旦发送,每个工作人员都会收到它。 我知道SQS不支持消息广播。通过查看类似的问题/线索,我看到了使用SNS而不是SQS的建议。由于以下原因,我不确定这是否适用于我: 应用程序实例是自动缩放组的一部分,因此可以动态添加和删除它们。在这种情况下
我正在考虑一个.NET对等应用程序的想法,其中一个对等方使用UDP数据包在子网上通告其存在。然后,任何侦听对等方都将从数据包中获得足够的信息,从而使用TCP建立与广告客户的直接通信通道。 广播数据包似乎需要定向到特定的端口号,并且,为了接收数据包,对等方需要绑定到ipaddress.any上的该端口。 采用这种设计,是否有可能运行绑定到同一NIC的多个对等体?我只得到一个SocketExcepti
给stackoverflow社区的人们。我正在寻找一些帮助,以解决HikariCP连接池面临的问题。 高级:我正在尝试使用线程池创建多个线程,我的计划是为每个工作线程提供独立于HikariCP的连接,但HikariCP所做的是在多个线程之间共享一个公共连接。我正在使用 以检索DB连接。现在,当我关闭一个连接时,我在其他线程中看到问题,说连接关闭了,线程正在处理的批次记录被丢弃。 以下是我的日志文件
首先,我只能使用HTML和/或CSS。我没有能力使用PHP或JavaScript? 我研究了一个iFrame,但我不确定是否有可能有一个带有iFrame的下拉菜单?
问题内容: TableB.TableAID的外键约束。我需要能够允许TableB.TableAID使用来自TableA.ID或TableB.ID的值,因此在单个列上有多个外键约束,我需要它允许或。谢谢! 问题答案: 这是不良设计的明显标志。您永远不需要这样做,如果您这样做,则需要重新考虑设计。 您不能使一个字段与两个不同的FK关联。
问题内容: 我试图创建一个查询,使我可以将联系人的多个电话号码合并到单独的列中。 例如,我想要以下内容 相反是: 尽管这可能是不好的做法,但严格来说,我可以将结果导出到CSV,以便将该数据上传到CRM系统,该系统在导入时不允许任何重复。从那以后,我四处张望,似乎找不到与电话号码相关的答案,并且只允许输入两个而已。 最复杂的部分是数据库的结构,最有可能涉及复杂的查询。这是到目前为止我尝试过的操作,但