2012-05-30 33 views
2

我想問一些好的做法。我有一個Node.js(Express)Web服務器和socket.io推送服務器(以防技術問題)。我可以將它們都變成一個應用程序,但我希望它們分離(如果需要,它們可以相互通信)。有兩個原因可以做到這一點:設計實時Web應用程序(Node.js和socket.io)

  1. 這將更容易管理,調試和開發應用程序;
  2. 縮放應用程序會容易很多。如果需要,我可以添加推送服務器或Web服務器的另一個實例;

這至少是我相信的。唯一的問題是,當客戶端連接到單獨的socket.io服務器時,它不會發送cookie(不同的端口,跨域策略)。

我想出的解決方法是在前面放置一個反向代理(用Node.js編寫),並檢查我們正在處理的請求是什麼類型的請求,並相應地將它發送到Web服務器或推送服務器。太棒了,現在我們在網絡服務器和推送服務器上都有cookies。反向代理可以是負載均衡器,這是額外的好處。

對我來說這看起來不錯。你對這個設計有什麼看法?也許任何其他解決方法的Cookie問題?

回答

1

我最近做了一些相似的事情,我們最初使用了一個node.js反向代理,但遇到了可靠性/可伸縮性問題。我們發現服務靜態文件和代理請求最好留給nginx。對於獨立代理,haproxy也是一個非常可行的解決方案。

HaProxy
Nginix as a reverse proxy

+0

呀,HAProxy的是真的很酷。你是否使用WebSockets?因爲我在這裏遇到一些問題。 – freakish

+0

我將這個答案標記爲正確的,因爲它給了我很多好主意(HAProxy是最好的:))。其中一個後果是我不想再使用Socket.IO(請參閱此問題:http://stackoverflow.com/questions/11115863/redis-clients-broadcast-problems-in-the-context-of-socket -io瞭解更多詳情)。謝謝! – freakish

相關問題