我应该使用Redis的Pub和Sub单独连接吗?

时间:2014-03-26 17:08:29

标签: event-handling redis message-queue socket.io

我注意到 Socket.io 正在为Pub和Sub使用两个单独的连接到 Redis 服务器。是否可以改善性能?或者它只是向更有组织的事件处理程序和代码的转变?两个单独的连接和一个单独的连接用于发布和订阅有什么好处和缺点。

P.S。系统正在推送它正在接收的相同数量的消息。它将更新推送到服务器,这些服务器位于层次结构中的同一级别,因此没有主服务器,推送消耗消息的所有更新或从服务器。一台服务器将有大约4-8个订阅,它会将消息发送回这些服务器。

P.S.S。对于专门建立的作业队列来说,这更像是一项工作吗?我正在看Redis的原因。是我已经在其中保留了一些共享对象,这些对象被所有服务器使用。消息队列是否值得添加另一个网络连接?

1 个答案:

答案 0 :(得分:39)

必需为pub和sub使用两个连接。订阅者连接无法发出subscribepsubscribeunsubscribepunsubscribe以外的任何命令(尽管@Antirez暗示了订阅者安全将来ping)。如果您尝试做其他事情,redis会告诉您:

-ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context

(请注意,您无法使用redis-cli对此进行测试,因为这样可以很好地理解协议,以防止您在订阅后发出命令 - 但任何其他基本套接字工具都可以正常工作)

这是因为订阅者连接的工作方式非常不同 - 而不是基于请求/响应,传入的消息现在可以随时进入,未经请求。

publish是常规请求/响应命令,因此必须在常规连接上发送,而不是在订户连接上发送。