2014-03-26 25 views
10

我注意到Socket.io正在使用Pub和Sub的两个单独的连接到Redis服务器。这是否可以提高性能?或者它只是纯粹向更有组织的事件处理程序和代码迈进?这两个单独的连接和一个用于发布和订阅的单一连接的优点和缺点是什么?我应该为Pub和Sub使用Redis的单独连接吗?

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

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

回答

35

你是需要使用pub和sub的两个连接。用户连接不能发出除subscribe,psubscribe,unsubscribe,punsubscribe(尽管@Antirez将来暗示用户安全的ping)以外的任何命令。如果您尝试做别的,Redis的告诉你:

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

(请注意,你不能用Redis的-CLI对此进行测试,因为这理解协议不够好,以防止你一旦发出命令你已订阅 - 但任何其他基本套接字工具都应该正常工作)

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

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

+0

谢谢你。我完全失去了为什么我得到这个错误。 –