尝试大多数websocket引擎后,我得出结论,最好的方法是使用Primus(实时框架的通用包装器),以便能够在不更改我的功能的情况下测试可能出现的任何websocket框架。

即使Primus做到了它所说的,我还是发现自己想扩大规模。

Primus有许多插件,其中两个是:primus-cluster和primus-redis-rooms。
这两个是使用Redis pub-sub以便在有多个节点进程时进行扩展的组件。我两个插件都面临的问题是我无法将消息发送到单独的套接字-spark。这意味着不会保存火花,而是将其传递给Redis,以便每个进程都知道总共有多少火花。

有没有人知道如何实现这一目标?

最佳答案

primus-redis和primus-redis房间的问题在于,它仅实现广播,而不是从一台服务器实现广播->在另一台服务器消息传递中产生火花。

至于您建议的房间骇客,这是“不错”的选择,但绝对是骇客,它会带来很多开销。我认为创建一个插件并不难:


为每个接受的连接将spark.id添加到redis(spark.id->服务器地址)。
连接断开时,从redis中删除spark.id。
为服务器添加发布/订阅通道(服务器地址),以便它可以接收消息。
使该通道使用spark.ids侦听消息,并在Primus服务器上找到火花并编写消息。
编写一个在redis中找到spark.id的方法,以便它知道服务器地址,并向通道发布带有需要与spark.id一起写入的消息的消息。
将模块发布到npm并获得大量免费啤酒;-)


所写的内容可能要比您建议的破解时间长一些,但值得付出努力。

关于node.js - Node.js Primus WebSocket集群,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23910598/

10-09 21:45