1

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

即使 Primus 做到了它所说的,我发现自己处于我想要扩展的情况。

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

有谁知道如何实现这一点?

4

1 回答 1

1

primus-redis 和 primus-redis 房间的问题在于,它只实现广播,而不是来自一台服务器 -> 不同服务器消息传递上的火花。

至于你建议的房间黑客是一个“好的”替代方案,但它绝对是一个黑客并且提供了很多开销。我认为创建一个插件并不难:

  • 对于它接受的每个连接,将 spark.id 添加到 redis(spark.id -> 服务器地址)。
  • 当连接断开时,从 redis 中删除 spark.id。
  • 为服务器添加 pub/sub 通道(服务器地址),以便它可以接收消息。
  • 让这个频道用 spark.ids 收听消息,并在 Primus 服务器上找到火花并写入消息。
  • 编写一个在redis中找到spark.id的方法,这样它就知道服务器地址,并使用需要与spark.id一起写入的消息对频道进行PUBLISH。
  • 将模块发布到 npm 并获得大量免费啤酒 ;-)

写你建议的黑客可能需要更长的时间,但这可能是值得的。

于 2014-06-02T11:41:36.580 回答