[英]SignalR using server-sent event on Chrome
我的問題:
我在Chrome上運行我的代碼,注意SignalR正在使用html5 server-sent events
作為自動選擇,很棒。 但是,當我刷新服務器端的onDisconnect()
頁面時,直到30秒后才會觸發。 Hub
是否有任何設置可以立即對斷開事件做出響應?
我的觀察:
請注意,延遲問題僅在我刷新頁面時發生,而不是在我關閉瀏覽器時。 關閉瀏覽器時, onDisconnect()
會立即觸發。 奇怪的事情 @_@
版本限制:
我使用的是SignalR 1.1.3(2.xx之前的最新版本),因為我們公司沒有vs2013而且無論如何我都無法使用2.xx與vs2013 express一起工作。
請幫忙 :)
這是一個錯誤。 我們在每次瀏覽器的新版本出現時都會遇到困難,我們需要驗證該東西是否仍然有效。 這是該問題的突出錯誤https://github.com/SignalR/SignalR/issues/2719
SignalR在window.unload
事件中向OnDisconnected
發送ajax請求,以通知服務器中止連接。 如果文檔是異步的,則在文檔卸載之前可能無法完成此ajax請求,或者根本不會被瀏覽器執行。 這種行為似乎在不同瀏覽器版本之間發生變化; 我在各種版本的Chrome和Firefox中都看到了這種情況。 在SignalR 2.x中,腳本還嘗試在onbeforeunload中停止連接; 我不確定這是否完全解決了這個問題。
如果所述ajax調用未完成,則僅在斷開連接超時 (默認為30秒)后調用OnDisconnected
。 您可以通過以下方式更改此設置
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
您可以嘗試修改SignalR腳本,以便在從window.unload中止時始終使用async: false
,這可能會增加您的方案中完成調用的幾率。 但是,從window.unload執行同步調用也可能被瀏覽器視為不好的做法,因為它可能會使頁面無法卸載。 因此瀏覽器可能決定不允許這樣的呼叫。 我在自托管跨域設置中遇到了與SignalR 2.0-rc1相同的問題,到目前為止還沒有找到一個好的解決方案。 因此,最終似乎依賴於立即調用OnDisconnected
可能並不明智。
我注意到的一個問題是,如果你使用jsonp: true
啟動集線器連接,即使關閉選項卡也不會通知服務器 - 在這種情況下,將ajax調用的dataType設置為“text”將至少是部分修復。
我現在看到有一個更具說服力的答案,但無論如何我都會發布這個。
編輯:
在這里使用它
window.onbeforeunload = function (e) {
$.connection.hub.stop();
};
實際上工作得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.