我正在学习redis,在docs中,它们有以下服务器设置:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});正如您所看到的,他们在第一行上创建了express服务器,这是我通常所做的,但随后他们将express传递给server = require(' http '),我猜测它是http服务器的一个节点模块。
我通常会做这样的事情:
const express = require('express')
const routes = require('./routes')
api.use('/', routes)
// Fireup up API server
api.listen(9090, () => {
debug('API server listening on port 9090...')
})在第一个示例中,为什么要将express传递给nodejs http模块?
编辑我知道行var server = require('http').Server(app)是为了以后我们可以使用var io = require('socket.io')(server);将服务器传递给socket.io我不明白的是:是什么'http‘模块?它是从哪里来的?它与快递服务器有何不同?
我提供的第二个示例来自一个api后端服务器,该服务器使用api前缀进行调用,这就是为什么它有'/api',我之所以将它包括进来只是为了演示我通常是如何设置服务器的,并表明在这个过程中我没有使用。
Edit2一个基于答案和评论的附加问题。为什么我们需要额外的一步才能将服务器传递给socket.io,而不仅仅是直接传递快速服务器?
发布于 2017-06-27 13:38:18
第一个是将Express应用程序挂载到一个新的HTTP实例,该实例也在使用Socket.io侦听套接字连接。这是创建一个运行Socket.io的快速服务器的方法之一。
下面是具有与示例代码相同的快捷和HTTP模块使用情况的文档。
HTTP模块是node的一部分,所以它只是节点的一部分。您可以在节点应用程序中的任何时候都需要它。Express是使用http模块构建的,并封装了http.Server。所以HTTP和Express是不同的,因为Express构建在http.Server类之上,并添加了中间件、视图引擎等内容。
如果您不需要socket.io部分,那么就可以去掉它,就像在第二个代码示例中一样。但是,不确定api表达式实例从哪个片段中来。
const express = require('express')
const routes = require('./routes')
const server = express()
const port = process.env.PORT || 1337
server.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
server.use('/api', routes)
server.listen(port, () => { console.log(`Listening on ${port}`) })https://stackoverflow.com/questions/44781368
复制相似问题