javascript - 观察传入 HTTP 请求的连接终止 - Node.JS

标签 javascript http node.js

在 Node.JS 中向另一个 HTTP 服务器发出请求时,您可以使用 request.on('close', function(){}); 监听服务器何时关闭连接。我一直在 Node 的 http.createServer() 中寻找类似的功能。我假设传递给回调的请求变量有一个 on() 函数,当客户端关闭连接时我可以调用它来监听。

var http = require('http');
http.createServer(function(req, res) {
    req.on('close', function() { console.log("Connection closed"); });
}).listen(80, '127.0.0.1');

然而,看完0.4.9 docs on streams之后,我注意到在关闭事件下它说:

Not all streams will emit this. (For example, an incoming HTTP request will not emit 'close'.)

有没有办法在 Node 中监听来自服务器的客户端连接终止?

最佳答案

好吧,您可以通过以下方式直接访问套接字:

req.socket.on('close', ...);

但是,在请求监听器中执行此操作将为每个请求绑定(bind)事件。因此,您应该绑定(bind)到连接事件:

var server = http.createServer();
server.on('request', function(req, res) { ... });
server.on('connection', function(socket) {
  socket.on('close', function() {
    console.log(socket.remoteAddress + '\'s keep-alive session died!');
  });
});

编辑: 也许我应该提到,是的,技术上http 服务器的套接字对象将携带对_httpMessage 属性上的响应的引用。但是,我建议不要使用它,因为它是内部 API 的一部分,并且可能会在没有任何警告的情况下发生变化。

最好添加您自己的属性以获取对上次请求的引用:

server.on('request', function(req, res) {
  req.socket.currentRequest = req;
});
server.on('connection', function(socket) {
  socket.on('close', function() {
    var req = socket.currentRequest;
    console.log('Socket closed. Last request for: ' + req.url);
  });
});

关于javascript - 观察传入 HTTP 请求的连接终止 - Node.JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6677394/

相关文章:

Javascript/jQuery 高度计算

javascript - React 中的惰性是什么?

java - Android 应用程序在传递字符串时崩溃

http - SPDY 与通过保持事件连接的 http 多路复用有什么不同

node.js - NodeJS返回值时出现循环结构错误

javascript - 为 Jest 测试设定时间目标

javascript - Jest 测试未通过 react-navigation 正常运行

c# - 异步请求如何用于服务器端验证

rest - 如何为大型集合条目上的订单更改实现RESTful API?

node.js - Mongoose 架构必填字段不适用于多个值