使用 redis 的 Tornado 套接字 sub\pub
Tornado sockets using redis sub\pub
我需要有关使用网络套接字和 redis pub/sub 通道的性能方面的建议。我使用 tornado 作为网络服务器。
我有大约 100 个客户端在监听某个事件的状态。每个客户端都有单独的事件,只需要监听自己的事件。套接字连接是短暂的,大约 1-20 秒。我看到两个选项:
在 redis 中为每个套接字事件对创建单独的 pub/sub 通道。在这种情况下我会有很多频道。
创建一个 pub/sub 频道,订阅所有客户端并在控制器中过滤消息以将它们转发到合适的客户端。在这种情况下,我有很多客户收听一个频道。
这些选项中哪个更适合性能?
案例一)
假设您有 M
个客户端,每个客户端只订阅一个频道(并且不订阅模式),那么发布 N
消息的复杂度是 O(N)
。
案例2)
假设您有 M
个客户订阅了一个频道,所有客户都会收到 N
条消息。发布和过滤过程复杂度为 O(MN)
.
所以你应该选择Case 1。Case 1速度更快,因为redis向通道发布消息的时间总是恒定的(除非是模式)
了解 redis 发布时间复杂度 here
我需要有关使用网络套接字和 redis pub/sub 通道的性能方面的建议。我使用 tornado 作为网络服务器。
我有大约 100 个客户端在监听某个事件的状态。每个客户端都有单独的事件,只需要监听自己的事件。套接字连接是短暂的,大约 1-20 秒。我看到两个选项:
在 redis 中为每个套接字事件对创建单独的 pub/sub 通道。在这种情况下我会有很多频道。
创建一个 pub/sub 频道,订阅所有客户端并在控制器中过滤消息以将它们转发到合适的客户端。在这种情况下,我有很多客户收听一个频道。
这些选项中哪个更适合性能?
案例一)
假设您有 M
个客户端,每个客户端只订阅一个频道(并且不订阅模式),那么发布 N
消息的复杂度是 O(N)
。
案例2)
假设您有 M
个客户订阅了一个频道,所有客户都会收到 N
条消息。发布和过滤过程复杂度为 O(MN)
.
所以你应该选择Case 1。Case 1速度更快,因为redis向通道发布消息的时间总是恒定的(除非是模式)
了解 redis 发布时间复杂度 here