測試發現用Mac Safari連上專案網站,在某些狀況下會連續Crash:
接著網頁因重複發生問題宣告停用:
在Crash報告中看到WebSocketChannel、ScoketStreamHandleBase等字眼,該網頁唯一會涉及WebSocket的只有SignalR,改用Chrome測試,找到SignalR在特定情境建立連線出錯的證據:
由HTTP 500錯誤訊息追進程式,發現PushHub的public override Task OnConnected()有Bug會throw Exception,造成SignalR Script在網頁載入後歷經"試圖建立連線->失敗->嘗試建立連線->失敗->..."的循環(猜想連帶也有WebSocket相關動作),在Chrome及其他瀏覽器只視為網路存取錯誤,但Safari卻因此Crash。SignalR Github Issue回報區有類似錯誤報告,Safari(不限iMac,也有iPad) + WebSocket導致Crash,但沒找到跟我相同的錯誤訊息。
問題在修正OnConnected Bug後消失!
結論: SignalR + WebSocket + Safari如發生Crash,可優先檢查是否為連線過程有錯導致。