【问题标题】:running node.js http server on multiple ports在多个端口上运行 node.js http 服务器
【发布时间】:2013-10-18 06:34:33
【问题描述】:

请任何人都可以帮助我找出如何在 node.js 中获取服务器套接字上下文,以便我知道请求来自我服务器上的哪个端口号。 如果我使用 http 标头请求,我可以读取服务器端口,但我希望它通过网络和诸如套接字上下文之类的东西,它告诉请求来自哪个端口号。

这里是示例代码:

var http=require('http');
var url = require('url');
var ports = [7006, 7007, 7008, 7009];
var servers = [];
var s;
function reqHandler(req, res) {
        var serPort=req.headers.host.split(":");
        console.log("PORT:"+serPort[1]);//here i get it using http header.
}
ports.forEach(function(port) {
    s = http.createServer(reqHandler);
    s.listen(port);
    servers.push(s);
});

【问题讨论】:

  • 每个 HTTP 服务器一次只能监听一个端口。此外,使用 Express 非常容易做到这一点。 expressjs.com/api.html#app.listen
  • 网络/套接字上下文是什么意思?没有在服务器上收到请求。
  • 套接字上下文是指特定监听套接字上的整个连接对象。我只是想知道上述哪个端口请求来自服务器。

标签: javascript node.js sockets


【解决方案1】:

req 对象具有对底层节点套接字的引用。您可以轻松获取此信息,记录在:http://nodejs.org/api/http.html#http_message_sockethttp://nodejs.org/api/net.html#net_socket_remoteaddress

这是您修改后的示例代码,以显示本地和远程套接字地址信息。

var http=require('http');
var ports = [7006, 7007, 7008, 7009];
var servers = [];
var s;
function reqHandler(req, res) {
    console.log({
        remoteAddress: req.socket.remoteAddress,
        remotePort: req.socket.remotePort,
        localAddress: req.socket.localAddress,
        localPort: req.socket.localPort,
    });
}
ports.forEach(function(port) {
    s = http.createServer(reqHandler);
    s.listen(port);
    servers.push(s);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2018-01-30
    • 2018-05-12
    • 2021-03-01
    • 2014-12-26
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多