我在这里阅读Socket.io聊天演示:http ://socket.io/get-started/chat/ ,在查看他们的require语句时我感到困惑。
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
io.on('connection', function(socket){
console.log('a user connected');
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
我的想法是正确的,它require("express")
会生成一个可执行的Express函数(具有所有必需的函数和require("http").Server(app)
随之而来的函数),并会创建一个具有其所有字段和函数的http.Server对象。
如果是这样,我会感到困惑,因为Express在我们调用.listen函数时会创建一个服务器,因此将Express应用程序传递到http模块服务器似乎是多余的,也是倒退的。
所以,我的问题是,这里到底发生了什么?
http服务器期望具有以下签名的功能:
function(req, res)
require('express')();
将使用该签名创建一个函数,该函数处理所有表达使路由,中间件等可用的魔力。Express可以创建自己的http服务器实例,但是由于您还使用了socket.io(它希望访问http服务器)以及),您将需要一个单独的http实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句