2017-09-12 108 views
0

由於的NodeJS是單線程的運行平臺,如何從單一的NodeJS應用程序內並行運行以下服務器:如何從一個NodeJS應用程序運行HTTP服務器,UDP服務器和WebSocket服務器?

  1. 的NodeJS的http服務器:服務於HTML5應用
  2. 一個WebSocket的服務器:以服務的WebSocket連接在http服務器上打開使用相同http連接的HTML5應用。
  3. UDP服務器:在同一臺機器或其他機器/碼頭容器上公開其他獨立運行的NodeJS應用程序的服務發現端點。

我想通過使用RxJS以某種方式實現上述目標,但寧願聽取社區有關他們的解決方案/經驗。

回答

1

Node.js不是單線程的。開發人員只能訪問一個線程。但是,在引擎蓋下,node.js是多線程的。

特別針對你的問題,你可以在同一個進程中啓動多個服務器。 Socket.io getting started example顯示使用http服務器運行websockets。 UDP也可以做同樣的事情。

希望有所幫助。

1

首先,您可以在node.js流程中擁有儘可能多的偵聽服務器。只要您在處理程序中編寫了適當的異步代碼,並且沒有任何CPU佔用算法可以運行,那麼您應該沒問題。其次,您的webSocket和http服務器可以與webSocket的設計工作方式完全相同的服務器進程。

然後,您的UDP偵聽器只需要位於Web服務器的某個不同端口上。

node.js的單線程方面僅適用於您的Javascript。你可以很好地運行多個服務器監聽器。如果在不同服務器上的兩個請求同時進入,那麼稍微到達另一個服務器的請求將調用它的處理程序,稍後到達的處理程序將排隊,直到第一個處理程序完成或返回,同時等待一個異步操作本身。這樣,單線程node.js可以處理很多請求。