使用node.jshttp.createServer
监听POST请求。如果要求快速完成,则一切正常。如果请求完成时间> 5秒,我将没有响应返回给客户端。
在创建的套接字上添加了事件侦听器:
server.on('connection', function(socket) {
log.info('SOCKET OPENED' + JSON.stringify(socket.address()));
socket.on('end', function() {
log.info('SOCKET END: other end of the socket sends a FIN packet');
});
socket.on('timeout', function() {
log.info('SOCKET TIMEOUT');
});
socket.on('error', function(error) {
log.info('SOCKET ERROR: ' + JSON.stringify(error));
});
socket.on('close', function(had_error) {
log.info('SOCKET CLOSED. IT WAS ERROR: ' + had_error);
});
});
在请求过程中(启动后约10秒后)收到了这些消息:
info: SOCKET TIMEOUT
info: SOCKET CLOSED. IT WAS ERROR: false
但是在客户端套接字上不会关闭,因此客户端等待响应。成功完成请求结束,发送响应(在关闭的套接字上!),但客户端仍在等待。
不知道如何阻止这些超时。从代码中删除了所有超时。试图添加KeepAlive,没有结果。
socket.setKeepAlive(true);
如何防止套接字公告超时?
根据节点的setTimeout文档,发生超时时不会断开连接。这就是浏览器仍在等待的原因。您仍然需要end()或destroy()套接字。您可以通过在套接字上调用setTimeout来增加超时。
socket.setTimeout(1000 * 60 * 300); // 5 hours
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句