簡體   English   中英

如何設置超時,專門處理node.js http.ClientRequest對象的continue事件的缺失

[英]How to set a timeout specifically dealing with the absence of a continue event for a node.js http.ClientRequest object

我正在嘗試在node.js中配置客戶端,如果未收到100連續響應,但客戶端請求了該響應,則將在幾秒鍾后發送數據。 下面的代碼片段可以做到這一點。 但是,如果在收到繼續事件並開始發送數據之后,但在我調用req.end()之前,由於某種原因套接字上沒有活動,則再次發生超時並執行其中的代碼。 因此,雖然這對於在我開始發送數據之后監視套接字上的活動很有用,但對於我要解決的問題不是很好-即使我沒有接收到continue事件也要發送數據。 我已經整理了一下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();
        });
});

一個簡單的解決方案是使用一個標志來確定您是否已經發送了數據:

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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM