我們的Safari移動客戶端受到signalr阻塞的5個連接之一的影響。我們使用的解決方案扶起這裏:https://github.com/SignalR/SignalR/issues/1406#issuecomment-14284093Signalr LongPollDelay和緩衝區
,我們有這些設置更改爲signalR 2.X以下
- GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromMilliseconds(1000);
- GlobalHost.Configuration.LongPollDelay = TimeSpan.FromMilliseconds(5000);
我們發送通知從服務器到客戶端沒有消息隊列或確認框架。我們不需要保證信息傳遞,但我們確實希望那裏有很高的成功可能性。我們認爲,這應該是可能的,因爲我們的低消息率和1000緩衝區大小但是有一些問題:
- 在隊列中的消息舉行,而LongPollDelay發生?在下次長時間輪詢期間,他們是否應該使用上述設置發送 ?
- 我們在2分鐘內發送單條消息的測試中,LongPollDelay建議在接下來的第二個長輪詢請求期間不檢索它們。 這是否有任何理由,即1分鐘後緩衝液沖洗?
- ConnectionTimeout會影響所有傳輸嗎?
- 如果ConnectionTimeout適用於所有傳輸,是否有一種方式 僅爲Safari移動用戶設置此選項,即有兩個連接 可用,並使用代理檢測指向特定連接?
- 有沒有設置LongPollDelay的方法,這樣也只有 只適用於Safari移動用戶?
所有建議歡迎和讚賞,馬特
[後續問題]
感謝那些幫助了很多。我們已經重試了30秒的LongPollDelay,並按預期工作。我有幾個後續問題可供您/他人關注:
1)在測試期間,我們還會看到客戶端大約每5分鐘向服務器發送一次ping請求。爲什麼ping時間間隔設置爲5分鐘,當斷開時間如此之短時,如果客戶端假定服務器通過備用機制斷開連接,則ping服務器的目的是什麼?
2)w.r.t.針對不同客戶的不同配置。我們是否可以不設置另一個SignalR端點並僅指定Safari移動設備?類似的迴應這篇文章: Can I reduce the Circular Buffer to "1"? Is that a good idea?
謝謝,我添加了一個後續問題供您考慮。 – MattPil29 2014-10-06 09:22:02
通常最好是將後續問題作爲新的SO問題提出,但我會在這裏回答。 1)Pings用於保持會話cookie活動,需要提出新的請求。 2)您可以配置多個端點,但是如果您希望端點與其他端點進行通信,則需要共享一個IMessageBus。這可以使用SignalR的IDependencyResolver來實現。請注意,兩個端點應該*不共享IDependencyResolver,只是IMessageBus。 – halter73 2014-10-09 21:26:28