我們在JavaScript中打開了SSE連接,無論是因爲服務器重新啓動還是其他原因,都可能隨時關閉。在這種情況下,重新建立連接會很好。怎麼做?有沒有辦法在客戶端找出連接已關閉?如何確定SSE連接已關閉?
Here:https://developer.mozilla.org/en-US/docs/Web/API/EventSource我發現只有一種方法來關閉連接,但沒有回調或測試方法來確定連接是否仍然存在。
謝謝你的幫助。
我們在JavaScript中打開了SSE連接,無論是因爲服務器重新啓動還是其他原因,都可能隨時關閉。在這種情況下,重新建立連接會很好。怎麼做?有沒有辦法在客戶端找出連接已關閉?如何確定SSE連接已關閉?
Here:https://developer.mozilla.org/en-US/docs/Web/API/EventSource我發現只有一種方法來關閉連接,但沒有回調或測試方法來確定連接是否仍然存在。
謝謝你的幫助。
如果連接被關閉(以這樣的方式,瀏覽器可以實現它),它會自動連接。它傾向於快速完成此操作(默認情況下Chrome爲3秒,Firefox爲5秒)。 readyState
將在連接(1)的同時進行。如果首先存在連接問題(例如,由於CORS問題),則只能關閉(2)。一旦關閉,它不會重試。
我更喜歡在頂層添加一個保持活動的機制,因爲瀏覽器無法總是檢測到死鎖(更不用說被鎖定的遠程服務器進程等)。有關詳細代碼,請參閱數據推送與HTML5 SSE的應用第5章,但基本上它涉及讓服務器每15秒發送一條消息,然後運行20秒的JavaScript定時器,但每次收到消息時都會重置該定時器。如果定時器過期,我們關閉連接並重新連接。
檢查readyState
屬性:
var es = new EventSource();
// Сheck that connection is not closed
es.readyState !== 2;
// or
es.readyState !== EventSource.CLOSED;
謝謝你的解釋,我也想過添加來自服務器的心跳消息,不知何故我不確定我是否可以信任'readyState'標誌。 – fifigyuri