在 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/