我正在编写一个事件记录器,使用Web worker在辅助进程中处理它。工作人员在本地收集事件,然后每隔几秒将其作为批处理发送出去。
如果浏览器或标签关闭,我需要一种方法来发送任何未发送的批次。网络工作者有没有办法听取onclose
事件之类的内容?
我意识到我可以在应用程序本身中执行此操作,但是记录器是一个将在多个位置使用的节点包,我宁愿不让前端负责清理事件记录器。 / p>
答案 0 :(得分:2)
网络工作者规范的processing model部分没有提到任何内容,特别是"杀死工人"和#34;终止工人"部分。我不认为你有很多选择,但是在UI线程上有代码会向工作人员发送一条消息告诉它清理。
答案 1 :(得分:2)
看起来你可以做self.onclose = function() { ... };
,当工人关闭时会调用它。可以阅读更多内容here。由于工人有自己的上下文,您必须通过WorkerGlobalScope
访问范围。公开的WorkerGlobalScope.self
应该允许您访问onclose()
等事件。
这里的警告似乎是API没有标准化。您必须检查您的浏览器以查看它是否受支持(看起来微软还没有实现这个以及IE / Edge的好运)。现在最好的跨平台做法可能就是@ T.J。克劳德建议在用户界面上设置代码,要求工人关闭。