2011-11-01 30 views
11

在開始編寫我的應用程序之前,我需要知道如果單個node.js實例(express和(socket.io或nowjs))不是足夠了。節點:縮放socket.io/nowjs - 跨不同實例的縮放

你可能現在告訴我,我不應該關心縮放,直到時間到了,但是我不想開發一個應用程序並且遇到麻煩,因爲你不能輕易地縮放socket.io或nowjs跨多個實例。

我最近讀到socket.io現在支持使用Redis進行擴展的方法(我也沒有經驗)。 Nowjs是建立在socket.io之上的 - 是否以同樣的方式工作?在nowjs.org上,你可以看到「NowJS的分佈式版本」正在開發中,並且要花錢。

回答

14

如果您需要擴展節點,人們通常會首先將一個負載均衡器放在多個節點實例的前面。今天的標準是nginx,儘管我想查看最近出現的節點平衡器'彈性'。下面是使用nginx的反向代理來管理多個節點實例別人的例子:

Node.js + Nginx - What now?

你提到的第二件事是socket.io/nowjs。根據您使用這些框架的方式,您可能會遇到想要在多個node.js實例的客戶端之間共享上下文的情況。如果是這種情況,我會推薦使用持久性存儲,比如redis,以彌合節點實例之間的差距。這裏有一個例子:

How to reuse redis connection in socket.io?

希望這是足夠的信息和閱讀,讓你開始,讓我知道如果您有任何問題。

快樂編碼!

+0

謝謝,你知道如果你可以使用nowjs和redis? – Eliasdx

+0

當然,你可以 - 他們是兩種完全不同的技術,具有不同的用途。 Nowjs將爲您提供類似於socket.io的持續服務器 - 客戶端連接功能。這對於服務器到客戶端的消息傳遞,客戶端廣播等是非常有用的。典型的例子是建立一個聊天室。 Redis更多地用作後端數據存儲 - 它可以執行諸如存儲鍵 - 值對,pubsub等之類的事情。它作爲單獨的進程(甚至在單獨的機器上)駐留在節點之外,這使得橋接多個服務器。 –

1

就像在討論一個旁註使用nginx的反向代理與socket.io,我至少知道它的方式另一個有用的鏈接,穩定版本的nginx 1.0.x不支持代理http/1.1連接(爲了使socket.io與websockets一起工作,這是需要的)。有一個解決方法在這裏描述:http://www.letseehere.com/reverse-proxy-web-sockets使其工作,或使用這樣的事情:https://github.com/nodejitsu/node-http-proxy而不是,nodejitsu的傢伙說這應該支持它。