簡體   English   中英

SignalR使用Chrome上的服務器發送事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM