2014-03-26 55 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

謝謝你。我完全失去了爲什麼我得到這個錯誤。 –