需要node.js/express中的http.createServer(app)

需要node.js/express中的http.createServer(app),node.js,express,Node.js,Express,使用node和express,下面的工作非常好 var app = express(); app.listen(app.get('port'), function() { }); 我假设在上述构造中隐式创建了一个服务器 在添加socket.io时,我看到了以下操作 var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); app.listen

使用node和express,下面的工作非常好

var app = express();

app.listen(app.get('port'), function() {
});
我假设在上述构造中隐式创建了一个服务器

在添加socket.io时,我看到了以下操作

var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

app.listen(app.get('port'), function() {
});

显式添加http.createServer(app)需要什么?创建一个额外的服务器不会把事情搞砸吗?或者换句话说,是否可以创建更多的
http.createServer(app)
。使用socket.io时,socket.io和express之间共享同一个http服务器。两个库都将事件侦听器连接到同一服务器,并有机会响应相同的事件。它们配合得很好,因为socket.io只处理相关请求,而express处理所有非websocket请求。仅供参考,您不能在同一端口上创建多个服务器。在操作系统中,一次只能有一个进程侦听TCP端口,因此第二个进程在尝试绑定正在使用的端口时会失败并出错。

您确定第二个示例就是您看到的吗?我希望第二个例子是
server.listen(…)
是的,它是
server.listen(…)
。但这似乎没有什么区别。我尝试了
app.listen
server.listen
——它们都很好用。我会保持这个例子的原样。你确定它们都是一样的吗?我认为,
socket.io
应用程序中无法正常工作。听着,
版本。你说得对。对于socket.io,它们的工作方式不同。(但对于会话也是如此)了解一台服务器正在使用。谢谢但是,为什么不
var io=require('socket.io')(app)工作?或者我们如何重新使用现有的服务器?为什么显式需要执行
createServer(…)
?通常express隐式创建服务器,您不需要访问或创建它。然而,socket.io确实需要显式访问它,以便它可以添加事件侦听器,而express可以选择使用您创建并显式提供的服务器实例,而不是隐式创建它自己的服务器实例,正是出于这种目的。另一种说法是socket.io不知道express,它知道节点核心http。