2013-10-17 9 views
0

我剛剛讀完「Node.js in Action」,我正在嘗試將Node.js - > Connect - > Express組合起來。我有一個關於我們在Node中創建的「服務器」的問題。在Node.js中,創建多個「服務器」對象是正常的,但只綁定一個端口?

node_server = http.createServer(); 
connect_app = Connect(); 
express_app = Express(); 

在上面的代碼中,這是真的connect_app基本上是一個的node_server「亞類」? (我知道,這是JavaScript,所以我們沒有真正的子類化,但我不知道還有什麼可以稱之爲擴展?)。同樣express_app基本上是connect_app的「子類」?我的理解是,所有這些對象都是可以綁定到端口並響應請求的服務器,但實際上,我們通常只將其中的一個綁定到端口,並用它來代理對其他服務器對象的請求。

我在正確的軌道上學習這個嗎?

回答

0

首先,擺脫有3個運行服務器的想法 - 因爲只有一個。

Express是一個依賴Connect的框架,它是另一個框架/中間件集合。此外,Connect依賴於NodeJS的API(HTTP模塊)。基本上是一個抽象,一個在另一個之上。

一個比喻是,Express是一輛車,Connect就像一個引擎,NodeJS是引擎的一部分。你只有一輛跑車(你的情況是一臺服務器),但是有多個組件供電。

@josh3736commented a better explanation它是如何工作的。

+1

對。我明白他們並不是真正的三臺獨立運行的服務器 - 這就是爲什麼我在標題中將「服務器」放在引號中的原因。我更感興趣的是知道創建多個「服務器」或「應用程序」的模式,但只綁定一個端口(並讓它向其他服務器請求代理)是正常的。感謝您的回答! – loneboat

+2

好吧,他們***都是同時運行的,但是你不會創建每個庫的實例;當你實例化Express時,它會隱式發生。 Express創建一個Connect的內部實例,它創建一個節點的http的內部實例,它創建一個網絡的內部實例。每個庫在最後都提供附加功能。 – josh3736

+0

@loneboat據我所知,你不能將一個端口用於多個應用程序。然而,有[這個答案](http://stackoverflow.com/questions/10791309/sharing-one-port-among-multiple-node-js-http-processes)其中一個模塊可以用來路由來自一個端口的請求到其他服務器正在運行的端口。 – Joseph

相關問題