0

我正在尝试在 node.js 中配置一个客户端,如果未收到 100-continue 响应但客户端已请求,它将在几秒钟后发送数据。下面的代码片段就是这样做的。但是,如果在我收到一个 continue 事件并开始发送数据之后,但在我调用 req.end() 之前,由于某种原因套接字上没有活动,那么再次遇到这个超时并执行其中的代码。因此,虽然这对于在我开始发送数据后监视套接字上的活动很有用,但它对于我试图解决的问题并不好——即使我没有收到继续事件也发送数据。我已经清理了 node.js 文档,虽然我找到了描述如何监听 continue 事件的部分,以及描述如何设置超时的部分,我找不到任何关于在等待继续请求时专门设置超时的信息。有什么好主意吗?

req.on('socket', function(socket) {
    var timeout = 5000
    socket.setTimeout(timeout);
    socket.on('timeout', function() {
        console.log('100-continue not received. Sending data anyway...');
        fs.createReadStream(filepath, byte_range)
            .pipe(req, {end: false}).on('end', function() {
                req.end();
            });
    });
});
req.on('continue', function() {
    console.log('100-continue received. Sending data...');
    fs.createReadStream(filepath, byte_range)
        .pipe(req, { end: false }).on('end', function() {
            req.end();
        });
});
4

1 回答 1

0

一个简单的解决方案是使用标志来确定您是否已经发送了数据:

var sentData = false;
var sendData = function(req) {
  if (sentData) return;
  sentData = true;
  fs.createReadStream(filepath, byte_range)
    .pipe(req, {end: false}).on('end', function() {
        req.end();
    });
};

req.on('socket', function(socket) {
    var timeout = 5000
    socket.setTimeout(timeout);
    socket.on('timeout', function() {
        console.log('100-continue not received. Sending data anyway...');
        sendData(req);
    });
});
req.on('continue', function() {
    console.log('100-continue received. Sending data...');
    sendData(req);
});
于 2013-05-16T21:16:27.280 回答