2014-09-19 57 views
4

在nodejs文檔http://nodejs.org/api/http.html#http_event_connect_1中,示例代碼在設置偵聽器(即req.on(...)方法)之前調用request.end()。示例代碼snipet如下所示。設置偵聽器之前調用nodejs request.end()方法

var req = http.request(options); 
    req.end(); 

    req.on('connect', function(res, socket, head) { 
    console.log('got connected!'); 

    // make a request over an HTTP tunnel 
    socket.write('GET/HTTP/1.1\r\n' + 
       'Host: www.google.com:80\r\n' + 
       'Connection: close\r\n' + 
       '\r\n'); 
    socket.on('data', function(chunk) { 
     console.log(chunk.toString()); 
    }); 
    socket.on('end', function() { 
     proxy.close(); 
    }); 
    }); 

如果這種情況下,請求沒有立即結束,並且聽衆可能永遠不會被調用。

回答

3

req.end()調用說您已完成發送請求正文到服務器(在這種情況下,沒有請求正文),而不是完整的請求/響應週期完成。此外,http.request將推遲到服務器的連接的開始,直到下一次通過運行循環,以便讓您有機會設置您的聽衆。

因此,在本質上,它是做這樣的事情:

  1. 創建一個新的請求
  2. 告訴請求,我們就大功告成了發送數據我們要發送的
  3. 告訴請讓我們知道,當我們連接到服務器

下運行環通

  • 嘗試連接到服務器
  • 連接成功後

  • 發送請求等
  • 相關問題