簡體   English   中英

關於快速服務器和nodejs http服務器的困惑

[英]Confusion regarding express server and nodejs http server

我正在學習redis,在文檔中他們有以下服務器設置:

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);
  });
});

正如你所看到的那樣,他們正在第一行創建快速服務器,這是我通常所做的,但隨后他們將快遞傳遞給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 var io = require('socket.io')(server); 我不明白的是: 什么是'http'模塊? 它從何而來? 它與快遞服務器有什么不同?

我提供的第二個例子來自api后端服務器,它使用api前綴進行調用,這就是為什么它有'/ api',我只是用它來演示我是如何設置服務器的表明我沒有使用require('http').Server(app); 進行中。

Edit2基於答案和評論的附加問題。 為什么我們需要額外的步驟將服務器傳遞給socket.io而不是直接傳遞Express服務器?

第一個是將Express應用程序安裝到一個新的HTTP服務器實例,該實例也在使用Socket.io監聽套接字連接。 這是您可以創建一個運行Socket.io的Express Server的方法之一。

這是socket.io文檔,具有與示例代碼相同的Express和HTTP模塊用法。

HTTP模塊是Node Core API的一部分,因此它只是節點的一部分。 您可以在節點應用程序中隨時要求它。 Express使用http模塊構建並包裝http.Server 因此,HTTP和Express的不同之處在於Express構建在http.Server類之上,並添加了諸如中間件,視圖引擎等內容。

如果你不需要socket.io那么你就可以擺脫它,就像你的第二個代碼示例一樣。 但是,不確定api express實例來自該代碼段的位置。

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}`) })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM