expressjs的socket.io设置

Kwa*_*ang 0 http node.js express socket.io server

我只是尝试使用'Socket.io'进行初始设置,文档说下面的代码

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

server.listen(80);
Run Code Online (Sandbox Code Playgroud)

这是我的原始代码.

var app = require('express')();
app.listen(80);
Run Code Online (Sandbox Code Playgroud)

两者有什么区别?具体是2个问题.

  1. require('http').服务器(app)=>为什么我需要将app作为Server的参数?
  2. 为什么我必须使用server.listen()而不是app.listen()?

我查了node.js和express.js的文件,但无法理解......

我非常感谢你的全面解释......

jis*_*soo 5

您的原始代码使用Express为您创建HTTP服务器.您可以执行app.listen()的原因是因为它还返回服务器实例,因此它本质上是一种方便的方法:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
}; 
Run Code Online (Sandbox Code Playgroud)

示例中的初始设置是以下内容的简写:

var http = require('http');
var server = http.createServer();
var express = require('express');
var app = express();
var socketio = require('socket.io'); 
server.on('request', app);
var io = socketio(server); 

server.listen(80);
Run Code Online (Sandbox Code Playgroud)

在此示例中,您将为Web套接字创建新的连接服务器,并自行将其集成到http服务器中.您app作为Server的参数传递的原因是,Express应用程序优先于典型http请求的套接字服务器.