我有一个网络 worker ,我试图在其中运行尽可能少的异步代码。
我希望在我的网络工作线程中有一个 while 循环,同时仍然允许处理消息。有没有办法手动更新浏览器中的事件系统?或者至少更新网络 worker 的消息?
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
}
最佳答案
不确定您的上下文在这里...我遇到了一个问题,浏览器端 Web Audio API 事件循环在不合时宜的时刻被来 self 的 Nodejs 服务器的 WebSocket 流量中断,因此我添加了一个 WebWorker 中间层来释放阻止浏览器事件循环中断
WebWorker 处理了所有网络流量,然后用数据填充了一个循环队列...当浏览器事件循环认为自己可用时,它从这个共享队列中提取数据(使用可传输对象缓冲区),因此永远不会被中断,因为它是一个发起对 WebWorker 的调用
我感受到你的痛苦,但是这种方法使事件循环保持愉快......由于 WebWorker 实际上在自己的线程上并且从浏览器端正在执行异步工作,因此无需最小化异步代码
关于javascript - 手动更新 Web Worker 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079567/