express and socket.io - declaration and starting s

2019-07-01 19:43发布

I've never understood how the below codes are equivalent:

Code 1:

var app = require("express")();
var server = require('http').Server(app);
var io = require('socket.io').listen(server);
...
io.use(...);
...
server.listen(3000, function(){});

Code 2:

var app = require("express")().listen(3000);
var io = require("socket.io")(app);
...
io.use(...);

Code 3:

var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
...
io.use(...);
...
server.listen(3000, function(){});

Can you please help me understand what is happening here ? And is one approach preferable over the other (and under what circumstances) ? Thanks.

1条回答
迷人小祖宗
2楼-- · 2019-07-01 20:30

The snippets are not equivalent. Some are from older versions of express and socket.io and some are more recent. I would use a modified example from the socket.io documentation.

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

/* Setup Express */
app.get('/', function (req, res) {
  ...
});

/* Setup Socket.io */
io.on('connection', function (socket) {
  ...
});

server.listen(3000);

Express now just exposes a handler function app which you pass to an http server. Socket.io expects you to pass it an http server for it to plug into.

查看更多
登录 后发表回答