小编典典

Express.js - app.listen 与 server.listen

all

这可能是一个非常基本的问题,但我根本不明白。 使用Express.js 创建应用程序和启动应用程序侦听端口 1234 有什么区别,例如:

var express = require('express');
var app = express();

//app.configure, app.use etc

app.listen(1234);

并添加一个 http 服务器:

var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

//app.configure, app.use etc

server.listen(1234);

有什么不同?
如果我导航到http://localhost:1234,那么我会得到相同的输出。


阅读 207

收藏
2022-03-07

共1个答案

小编典典

socket.io如果您想重用 HTTP 服务器,例如在同一个 HTTP 服务器实例中运行,则第二种形式(自己创建一个 HTTP 服务器,而不是让
Express 为您创建一个)很有用:

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

但是,app.listen()它也会返回 HTTP 服务器实例,因此只需进行一些重写,您就可以在不自己创建 HTTP 服务器的情况下实现类似的效果:

var express   = require('express');
var app       = express();

// app.use/routes/etc...

var server    = app.listen(3033);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});
2022-03-07