2013-10-17 11 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

相关问题