【问题标题】:Manually update web worker messages手动更新 Web Worker 消息
【发布时间】:2021-03-28 22:43:44
【问题描述】:

我有一个网络工作者,我试图在其中运行尽可能少的异步代码。

我想在我的网络工作者中有一个 while 循环,同时仍然允许处理消息。有没有办法在浏览器中手动更新事件系统?或者至少更新网络工作者的消息?

Node.js (process._tickDomainCallback()) 中似乎有类似的东西,但到目前为止我还没有找到任何用于 web 的东西。

使用setTimeout 不是一种选择。我想要一个解决方案或明确的答案,这根本不可能。

// worker.js

self.onmessage = function(e) {
   console.log("Receive Message");
};

while (true) {
  UpdateMessages(); // Receive and handle incoming messages

  // Do other stuff
}

【问题讨论】:

    标签: javascript dom-events web-worker


    【解决方案1】:

    不确定您的上下文是什么...我遇到了一个问题,浏览器端 Web 音频 API 事件循环在不合时宜的时刻被来自我的 nodejs 服务器的 WebSocket 流量中断,所以我添加了一个 WebWorker 中间层来释放使浏览器事件循环免受中断

    WebWorker 处理所有网络流量,然后用数据填充一个循环队列...当浏览器事件循环认为自己可用时,它从这个共享队列中提取数据(使用 Transferable Object 缓冲区),因此从未中断,因为它是一个发起对 WebWorker 的调用

    我感觉到你的痛苦,但是这种方法让事件循环保持愉快......因为 WebWorker 有效地在自己的线程上,并且从浏览器端进行异步工作,因此无需最小化异步代码

    【讨论】:

    • 我的情况很简单。我希望用户运行他们自己的 JavaScript 代码,但仍然希望允许完整的同步程序。但我仍然需要与这个网络工作者沟通。主要是因为我需要知道程序何时执行完毕。相反,我现在覆盖了 setTimeout 以完成此操作。仍然想知道是否有实际的解决方案,但现在就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2017-11-05
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多