2011-02-01 44 views
0

我們有一個長查詢和歌劇的問題。我自己是一名c程序員,併爲我們的需求開發了一個定製的http守護程序。在這種情況下,我們需要一個能夠處理大量連接的長輪詢服務器。歌劇院留下長查詢插口(0123)

問題是,歌劇以某種方式留下這些長期民意調查,即使點擊網站上的一些鏈接,當然也會打開新的鏈接。我們使用基本的長輪詢技術,嘗試在iframe中包含JavaScript。這與其他瀏覽器可以正常工作,但即使我強制以前的民意調查在服務器端關閉,歌劇重新打開它們。這不是很好,因爲在高流量的站點上,只有少數opera用戶可以通過瀏覽站點而使守護進程快速耗盡空閒的文件描述符(因爲每次點擊站點都會打開一個新的長輪詢並且舊的不會關閉)。頁面刷新不會導致相同的情況,它會做正確的事情:關閉長期輪詢並打開一個新輪詢。關閉歌劇後,所有文件描述符都關閉,一切都很好。

那麼,我應該在http-daemon中爲歌劇添加一些特定的標題,還是在javascript中有什麼錯誤?

編輯:使用版本測試:歌劇/ 9.80(X11,Linux的x86_64的; U; EN)的Presto/2.6.30版本/ 10.63

+0

你可以在某處發佈一段實際的代碼。沒有一個精確的例子,很難分析和提出解決方案。 – karlcow 2011-02-01 19:22:22

+0

在Opera 11中有效嗎? – karlcow 2011-02-01 22:02:36

回答

0

我們使用基本長輪詢技術,它試圖包括內部的iframe的javascript 。

那麼有問題的插座是提供的內容iframe

當然,如果你點擊離開頁面,Opera似乎應該關閉這些連接。但是你可以嘗試離開頁面時,明確地破壞iframes,是這樣的:

window.onbeforeunload = function() { 
    theIframe.parentNode.removeChild(theIframe); 
    theIframe = undefined; 
}; 

(我假設你要的iframe參考躺在附近的某個地方。)

編輯:甚至導航iframe別處第一:

window.onbeforeunload = function() { 
    theIframe.src = "about:blank";    // <== New bit 
    theIframe.parentNode.removeChild(theIframe); 
    theIframe = undefined; 
}; 
0

嗯,我認爲我們得到它「工作」..沒有修改JavaScript。我在http守護進程中爲歌劇制定了特定的規則,它回覆了「403 Forbidden」的老長調查(爲什麼我之前沒有嘗試過這個問題:P)。對這些舊套接字的簡單關閉()只是讓opera重新打開連接。

即使關閉瀏覽器上的標籤,歌劇也不會關閉這些長時間的民意調查,我不得不關閉整個歌劇過程。