2013-06-26 70 views
0

這是更多的設計問題,而不是實現,但我有點想知道我是否可以設計這樣的東西。我有一個交互式應用程序(類似於python shell)。我想託管一個服務器(可以說使用node.js http服務器或socket.io,因爲我不確定哪一個會更好),它會爲每個連接到它的客戶端產生一個新的child_process併爲其維護一個不同的上下文那個特定的客戶。對於node.js或socket.io,我是一個完整的noob。我管理的最大值是在socket.io服務器上有一個子進程,並將客戶端連接到它。 所以問題是,這會工作嗎?如果沒有,節點上是否有其他方式讓它起作用,還是使用本地服務器更好? 謝謝多個child_process與node.js/socket.io

回答

2

Node.js - 是單進程的web平臺。使用集羣(child_process),您將使用單獨的線程創建相同應用程序的獨立執行。
每個線程花費內存,這通常是爲什麼大多數傳統系統沒有太大的可擴展性,因爲每個客戶端都需要線程。對於節點來說,從硬件資源的角度來看,它將非常低效。
節點是基於事件的,你不需要擔心太多的範圍,只要你的應用程序邏輯沒有利用它。
建議工人數量與硬件上的CPU內核數量相等。

總是有一個主應用程序,它會創建工人。每個工作人員將創建http + socket.io監聽器,這些偵聽器技術上將綁定到主套接字並從那裏發送。 http請求將被路由到不同的工作人員,而套接字將在連接時被路由,但是那個工作人員將處理這個套接字直到它斷開連接。

+0

非常感謝Maksims ..所以如果子進程需要大量內存,除非我們有另一臺服務器進行負載平衡,否則將難以擴展。 – ssarangi

+0

負載平衡將通過所有工作人員沒有任何問題發生。而且每個工作人員都能夠在相對較好的硬件上處理數千個連接。如果你仍然需要,你可以創建CPUCores * 4工作者,例如4核心,16名工人。然後它們將被分散在Cores上,並且不會有大的內存開銷。但不是每個連接的工作人員。 節點與經典的阻塞平臺有很大的不同,並且Node可以非常有效地在一個線程上處理很多連接。 – moka