gpt4 book ai didi

node.js - Socket.io 与 Express,express 应用程序如何知道监听哪个端口?

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:49 25 4
gpt4 key购买 nike

我对 Nodejs 非常陌生,对 socket.io 和 Express 也很陌生。我有一些正在运行的代码,但我无法准确理解它为何有效。

我对以下代码的问题是 Express 应用程序如何知道监听端口 80?有一个服务器,听听。但代码中没有app.listen。然而 app.post() 很容易接受发布的数据。

请考虑以下代码

var https = require('https');
var url = require('url');
var fs = require('fs');
var bodyParser = require('body-parser');
var express = require('express');
var app = express();
//var io = require('socket.io');
var zlib = require('zlib');

app.use(bodyParser.urlencoded({extended: true }));

var options = {
key: fs.readFileSync('my.key'),
cert: fs.readFileSync('my.crt')
};


var serverPort = 80;
var server = https.createServer(options, app);
var io = require('socket.io')(server);


// log when the server is ready
server.listen(serverPort, function() {
console.log('Web socket server up and running at port %s', serverPort);
// this prints 80, as expected
});


app.post('/api', function (req, res) {
// working code is in here that receives the post variables and responds
}

最佳答案

对于 Express,app 对象只是某些 http 服务器的请求处理程序。如果您调用 app.listen(),那么 app 对象将为您创建一个 http 服务器。但是,如果您创建了自己的 http 服务器(您的代码示例就是这样做的),那么 app 对象将成为该服务器上的请求监听器,并使用以下代码行:

var server = https.createServer(options, app);

这将创建 http 服务器并将 app 注册为请求监听器(因此它可以看到所有传入请求)。这允许 Express 应用程序对象随后处理注册到服务器路由的路由,例如 app.get(...)app.post(...)

而且,Express 的端口是 http 服务器的端口,因此它是创建 http 服务器时使用的端口。这里需要了解的重要一点是 Express 并不是它自己的服务器。它只是某个 http 服务器的请求监听器。

在您的代码示例中,您的 http 服务器设置为端口 80,因此这是正在使用的端口,并且 Express 会注册为该端口上所有传入 http 请求的请求处理程序。

<小时/>

如果你看source code for app.listen() ,你会看到这个:

app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};

它所做的就是创建一个使用 app 对象作为监听器的 http 服务器,然后在该新服务器上调用 .listen()

关于node.js - Socket.io 与 Express,express 应用程序如何知道监听哪个端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com