node.js超時(shí)timeout詳解

字號(hào):


    如果在指定的時(shí)間內(nèi)服務(wù)器沒(méi)有做出響應(yīng)(可能是網(wǎng)絡(luò)間連接出現(xiàn)問(wèn)題,也可能是因?yàn)榉?wù)器故障或網(wǎng)絡(luò)防火墻阻止了客戶端與服務(wù)器的連接),則響應(yīng)超時(shí),同時(shí)觸發(fā)http.ServerResponse對(duì)象的timeout事件.
    response.setTimeout(time,[callback]);
    也可以不在setTimeout中指定回調(diào)函數(shù),可以使用時(shí)間的監(jiān)聽的方式來(lái)指定回調(diào)函數(shù).
    如果沒(méi)有指定超時(shí)的回調(diào)函數(shù),那么出現(xiàn)超時(shí)了,將會(huì)自動(dòng)關(guān)閉與http客戶端連接的socket端口.如果指定了超時(shí)的回調(diào)函數(shù),那么超時(shí)了,將會(huì)出現(xiàn)調(diào)用回調(diào)函數(shù),而不會(huì)自動(dòng)關(guān)閉與http客戶端連接的socket端口.
    復(fù)制代碼 代碼如下:
    var http=require("http");
    var server=http.createServer(function(req,res){
    if(req.url!=="/favicon.ico"){
    //超時(shí)監(jiān)聽
    /*res.setTimeout(1000);
    res.on("timeout",function(){
    console.log("響應(yīng)超時(shí).");
    });*/
    //超時(shí)直接回調(diào)
    res.setTimeout(1000,function(){
    console.log("響應(yīng)超時(shí).");
    });
    setTimeout(function(){
    res.setHeader("Content-Type","text/html");
    res.write("<html><head><meta charset='utf-8' /></head>");
    res.write("你好");
    res.end();
    },2000);
    }
    });
    server.listen(1337,"localhost",function(){
    console.log("開始監(jiān)聽"+server.address().port+"......");
    });
    運(yùn)行代碼結(jié)果:
    名單
    刪除超時(shí)的回調(diào)函數(shù)后:
    名單1