为什么我在 Node 的 HTTP 服务器上收到这么多连接事件?

Why I got so many connection events on Node's HTTP server?

我有一个使用 socket.io 的网络应用程序。它在我本地机器上的 localhost:8000 上运行。为了在我的应用程序中找到恼人的资源泄漏,我尝试注销我的 HTTP 服务器上的连接事件:

server.on('connection', function(conn) {
    //log out connection details
});

当我在页面加载后在浏览器中打开该页面时,我可以在日志中看到多个连接事件 - 如下所示:

connection established: 127.0.0.1:54148
connection established: 127.0.0.1:54149
connection established: 127.0.0.1:54146
connection established: 127.0.0.1:54152
connection established: 127.0.0.1:54144
connection established: 127.0.0.1:54155

奇怪的是,我没有在页面加载后创建 WebSocket 连接 - 仅当用户单击按钮时才创建。但是我没有点击任何按钮,我仍然看到这些奇怪的连接。

如果我单击我的按钮以 socket.io 连接到我的服务器,日志会显示一个新连接:

connection established: 127.0.0.1:54155

幸运的是,我在日志中看到的每个连接都在一段时间后关闭了 - 所以我想这不可能是我的资源泄漏的原因。

但我还是很好奇:是什么导致了这些连接事件?为什么端口号这么奇怪(不是我服务器监听的8000)?

编辑:

我的服务器配置并不特殊。在 server.js:

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var configSettings = require('./configSettings');

var socketIOServer = require('./server/socketServer')(io); // config socketServer
require('./server/static.js')(app, express); // static middleware
require('./server/routes.js')(app, configSettings); // routes

exports = module.exports = server;

exports.use = function() {
     app.use.apply(app, arguments);
};

exports.configSettings = configSettings;

start.js中:

var server = require('./server');

var port = server.configSettings.serverPort;
var serverIpAddress = server.configSettings.serverIpAddress;
server.listen(port, serverIpAddress);

您从 HTTP 服务器记录的连接是正常的,并且与您的 HTML 页面上使用的资源(JS、CSS、图像、网站图标、等)。

您记录的端口号是客户端端口号。虽然不是随机的,但它们会随着与您的服务器建立的每个新连接而改变。在资源交付给客户端后(并且取决于保持活动状态,一些额外的时间),连接将被关闭。

一般情况下,Node 可以处理数千个并发连接。

这显然不能解决您的资源泄漏问题,但可以解释您看到的连接事件。