我正在寫一個事件記錄器,使用Web工作人員在輔助進程中處理它。工作人員在本地收集事件,然後每隔幾秒將其發送一批。在Web工作者關閉之前有什麼方法可以執行操作嗎?
我需要一種方式來發送任何未發出的批次,如果瀏覽器或選項卡關閉。有什麼方法讓網絡工作人員傾聽onclose
事件?
我意識到我可以在應用程序本身做到這一點,但記錄器是將在多個地方使用的節點包,我寧願不讓前端負責清理事件記錄器。
我正在寫一個事件記錄器,使用Web工作人員在輔助進程中處理它。工作人員在本地收集事件,然後每隔幾秒將其發送一批。在Web工作者關閉之前有什麼方法可以執行操作嗎?
我需要一種方式來發送任何未發出的批次,如果瀏覽器或選項卡關閉。有什麼方法讓網絡工作人員傾聽onclose
事件?
我意識到我可以在應用程序本身做到這一點,但記錄器是將在多個地方使用的節點包,我寧願不讓前端負責清理事件記錄器。
web worker規格的processing model部分沒有提到任何內容,特別是「殺死工人」和「終止工人」部分。我認爲你沒有多少選擇,只能讓UI線程上的代碼向工作人員發送一條消息,告訴它清理。
這就是我要來的結論,但我希望有一些我錯過了。我會把這個開放一段時間,但除非發生奇蹟,否則我最終可能會將此標記爲決議。 – JesseF
@JesseF:是的,我至少會給它一整天。很高興做錯了。 –
看起來你可以做self.onclose = function() { ... };
當工人關閉時會被調用。更多可以閱讀here。由於工人有自己的環境,因此您必須通過WorkerGlobalScope
訪問示波器。公開的WorkerGlobalScope.self
應允許您訪問諸如onclose()
之類的事件。
這裏的警告似乎是API不標準化。你必須檢查你的瀏覽器,看它是否被支持(並且它看起來像微軟沒有用IE/Edge實現這個好運氣)。現在做這個跨平臺的最好方法可能是@ T.J。 Crowder建議在用戶界面上放置代碼以要求工人關閉。
我已經度過了那些瘋狂的質量傢伙想要報告所有的時間,即使窗戶藍屏。告訴他們這是不可能的,他們不會爭辯:) –
這對您有幫助嗎? https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/onclose – dlkulp
@dlkulp哦,夥計,我希望如此。讓我試試看。 – JesseF