[問題] 關於 Server Send Event 的疑問

看板Ajax作者 (Mr. Pan)時間7年前 (2017/04/11 10:50), 7年前編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
大家好,最近在製作一個功能的時候需要用到 Server Send Event 功能 基本上目前在 CROS 和 Client 設定都差不多完成,但遇到一個小問題: 在 Firefox 上面,當 Client 網路斷掉的時候,EventSource 物件 會偵測到無法繼續與 Server 溝通,而觸發 onerror 但是 Chrome 上面則不會,會持續等到網路再連上線後,一次把這段期間 所有 Server 的訊息給抓下來 未來目標會放在 nw.js 或者 Electron 上面,但這些都是 Chromium 行為模式和 Chrome 相同。 但我比較 Prefer Firefox 的方式,希望能夠偵測到無法繼續與 Server 連線 觸發 onerror 好讓我處理。 不知道有沒有甚麼設定可以調整呢? 感恩~ 另外想請問 data 的 "retry" 是什麼意思,我看說明不是很確定意思... 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.137.23 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1491879034.A.2B4.html

04/11 19:52, , 1F
指定要重試幾次/間隔多久後才觸發on error
04/11 19:52, 1F

04/11 19:52, , 2F
但 firefox 貌似不是很遵守這個行為
04/11 19:52, 2F
https://www.w3.org/TR/2011/WD-eventsource-20110208/ 我再查了一下 w3c 的規格(上面網址),retry 是指: 當連線中斷後(包含完成傳輸或預期外的斷線),多少 ms 後會自動重新連線 若使用 .close() 關閉,則不會再嘗試重新連線 但有注意到這兩段: https://gist.github.com/anonymous/d6edac5b9badd33b471b6611bf4dcfdd 這樣綜合起來,基本上就是只要結束連線(正常或意外),瀏覽器必須要 在指定時間後重新連線(除非有呼叫 .close() )。 但是要是中間發生錯誤或問題,那麼必須要觸發 error 事件 這樣看起來似乎 Firefox 實作的比較符合規範,但 Chrome 在網路 斷線的時候卻沒有觸發 error ? 剛剛再測試,發現只要斷的時間夠長 Chrome 在網路重新回來後就會觸發 error 並且自動重新開始連線 而 Firefox 則是網路一斷線,馬上就會跳 error,但過了一兩次重連沒連上 就不會再繼續連線(這似乎不符合規範) 只要自己會重新連線基本上就沒問題了XD ※ 編輯: darkk6 (223.138.231.175), 04/12/2017 10:58:17
文章代碼(AID): #1Ox4HwAq (Ajax)
文章代碼(AID): #1Ox4HwAq (Ajax)