2012-07-06 88 views
3

我試圖使用NodeJS實現長輪詢技術。在同一瀏覽器中進行多個連接的長輪詢

我有這個基本代碼部署在服務器上。

http = require('http'); 

function onRequest(request, response) { 
    console.log('onRequest reached'); 
} 

http.createServer(onRequest).listen(8080); 
console.log('Server has started.'); 

當請求localhost:8080時,會觸發onRequest。當這個連接處於活動狀態時,我在第二個選項卡中請求相同的頁面,但onRequest未被觸發。但是,當第一個連接仍處於「長時間輪詢」狀態時,從另一個瀏覽器請求相同的頁面會觸發onRequest。

瀏覽器有什麼限制嗎?這是怎麼發生的?如何避免這種情況?

btw。我正在嘗試實施長輪詢聊天和通知系統。實際上,請求應該由AJAX調用完成。

回答

3

這可能是瀏覽器正在等待響應。嘗試只發送標題,立刻道:

function onRequest(request, response) { 
    response.writeHead(200, {'Content-Type': 'text/html'}); 
    console.log('onRequest reached'); 
} 

另一個祕訣:如果你要使用長輪詢,我建議你看看Server-Sent Events。瀏覽器支持的瀏覽器非常廣泛,舊版瀏覽器也有polyfill。這裏是一個example in CoffeeScript,展示瞭如何從node.js服務器發送事件。

+0

立即發送標題沒有幫助。 – 2012-07-06 11:53:52

+3

好的。具體如下:根據HTTP/1.1規範,瀏覽器最多隻能同時打開2個連接到同一臺服務器。我不確定你的麻煩來自第一個請求'/'和'/ favicon.ico'的窗口,或者其他的東西......無論如何,這對於長輪詢來說是一個很大的缺點。 – 2012-07-06 12:01:07

+0

哦。我也讀了大約2個連接限制。但忘了/favicon.ico :)現在我需要避免這種情況。 Facebook與他聊天的內容是什麼? – 2012-07-06 12:15:06

相關問題