在Web-Worker中同步等待消息

2024-02-12

是否有某种方法可以同步等待或检查网络工作人员中的新消息?

我有一大堆复杂的代码(从 emscripten 编译的 LLVM),我无法围绕回调进行重构。

我需要确保在收到并处理来自 UI 线程的消息之前,特定行之后的代码不会执行。如果我用 while 循环阻塞,则事件循环永远不会运行,因此我无法接收消息。


这是我在工作中也遇到的问题Pyodide https://github.com/pyodide/pyodide。我想从主线程“同步”调用一个函数。

一种解决方案涉及Atomics and SharedArrayBuffer蜜蜂。从网络工作者的角度来看,这看起来像下面这样

  1. postMessage主线程
  2. 冻结我们自己Atomics.wait
  3. 被主线程解冻
  4. 读取结果SharedArrayBuffer。我们无法收到结果postMessage,因为没有同步方式询问“我收到消息了吗”。

当然,这需要大量的额外代码来处理所有序列化、数据传递等。

主要限制是要使用这些 API,需要具备COOP/COEP 标头集 https://dev.to/stefnotch/enabling-coop-coep-without-touching-the-server-2d3n。另一件需要记住的事情是,这仅适用于最新的浏览器,例如 Safari 15.2(于 2021 年 12 月发布)。

还有一个替代解决方案同步 XHR 和 Service Worker https://glitch.com/edit/#!/sleep-sw?path=worker.js%3A28%3A71,但我还没有研究过这个选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Web-Worker中同步等待消息 的相关文章

  • 自动调整Google网站嵌入代码的高度(html)

    我正在使用 Google 协作平台嵌入 HTML 代码 将代码粘贴到 从网络嵌入 窗口中 输出的长度是可变的 我希望有一种方法可以动态调整父级的高度iframeGoogle 协作平台用于托管我的 HTML 我知道我可以使用 Google 协
  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • 通过pm2运行node.js,但经常重新启动:通过信号[SIGINT]以代码[0]退出

    我试图在我的系统上运行 node js 但遇到了这个问题 2016 06 01 20 46 28 App app with id 13 and pid 12633 exited with code 0 via signal SIGINT 2
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 打开 md-calendar 时滚动到当前日期

    目前正在构建一个使用 Angular Material 的应用程序 我们需要一个 md calendar 组件 我们想要自定义按钮样式和内容 因此不使用普通的 md datepicker 问题是 当 md calender 打开时 滚动位置
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 判断一个数字是否能被 3 或 5 整除 (FizzBu​​zz)

    如何根据输出是否能被 3 或 5 整除来更改输出 如果它能被 3 整除 我想显示 rock 如果它能被 5 整除 我想显示 star 类似于 FizzBu zz 如果两者都有 他们都会看到 这是我的代码 if var n Math floo
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • IE 中的每个 JavaScript 支持?

    我有这个代码
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • 强制输入数字小数位

    我想强制

随机推荐

  • 计算小距离用什么公式

    Hy 我需要计算 2 个 GPS 点之间的距离 我读了这个问题计算地理邻近度的公式 https stackoverflow com questions 2096385 formulas to calculate geo proximity但
  • 更改 MouseOver 上的 MenuItem 的颜色

    我想在鼠标悬停时更改菜单项的颜色 我还需要圆形边框 图像和文本框 当我设置样式时 一切正常 只有 mouseOverEvent 正在执行任何操作 背景不会改变 我的代码是
  • 绕圆形路径移动一个点[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个带有二维坐标的点 我需要更改点坐标值才能遵循圆形路径 我将如何使用 C 实现它 使用正弦和余弦 for double t 0
  • 有没有办法让字典作为 python 中 pandas Dataframe 的条目?

    就像是 d a 1 b 2 data pandas DataFrame data new column d data new column 0 最后一个命令将返回字典 d 您可以将字典包装在列表中 以便将字典视为元素而不是可迭代对象 d a
  • C++ 向量元素计数

    在C 中 使用向量头 如何找到元素的数量 include
  • 是否可以修复长 html huxtable 的头部?

    这适用于使用以下命令生成的表kableExtra这在检查长桌子时很有用 我想知道是否有人知道如何做到这一点huxtable 这是一个示例 Rmd 以了解我的意思 我希望在向下滚动时将 huxtable 标题固定在页面顶部 就像在 kable
  • 短路和一元运算符的工作

    请看一下下面的代码 int i 5 boolean b i lt 5 i lt 5 line 2 System out println i line 3 prints 5 在第2行 根据我的理解 因为在所有运算符中 具有最高优先级 i应首先
  • C++ 中的内存管理模式

    我认为我对正常 功能 设计模式有丰富的经验 例如所描述的在四人帮的书 http www amazon co uk Design patterns elements reusable object oriented dp 0201633612
  • 一段时间后重新连接到 QueueManager 时,在 MQ 客户端 (C#) 上收到错误原因代码 2059

    一段时间后我无法重新连接到 MQQueueManager 作为异常 原因代码2059 当我构造 MQQueueManager 的新对象时 抛出 MQRC Q MGR NOT AVAILABLE 我的客户端应用程序是用 NET C 编写的 我
  • FirstOrDefault 行为直接在 LINQ 语句中

    似乎我可能错过了语法中的一些简单内容 但我想直接从 linq 语句获取 FirstOrDefault 的结果 而不必先将 IEnumerable 存储在临时变量中 像这样的事情 var bestCar from c in cars orde
  • 如何制作类型提示前向引用[重复]

    这个问题在这里已经有答案了 我正在研究 python 的 3 5 类型提示 我想知道如何键入提示类方法的返回类型 这就是我的想法 gt gt gt class A classmethod def a cls gt A pass Traceb
  • 引用分配是线程安全的吗?

    我正在 C 中构建一个多线程缓存 它将保存 Car 对象的列表 public static IList
  • 将 apply 的管道输出传送到 centos 中的记录

    我正在尝试自动化 websocket 客户端的一些测试 该客户端根据命令连接到服务器 该服务器基本上是一个语音到文本引擎 客户端支持来自麦克风的音频流 这样人们就可以实时录制自己的声音并将其传输到引擎 我在 centos 虚拟机中运行客户端
  • 如何改变drawAtPoint中NSString的颜色

    我这里有一段代码 它绘制了一个带有单字符字符串的块 CGContextDrawImage context CGRectMake blok getLocation x xunit blok getLocation y yunit 40 40
  • 在 python setup.py data_files 中包含整个目录

    设置的 data files 参数采用以下格式的输入 setup data files target directory list of files to be put there 有没有办法让我指定整个数据目录 这样我就不必单独命名每个文
  • 模糊测试 XML 解析器

    我想对 XML 解析器进行模糊测试 并想知道是否有一些合适的模糊器 如果不仅能生成随机垃圾 还能利用 XSD 或 DTD 等现有模式规范 那就太好了 以下是我在几个月前的搜索过程中偶然发现的一些 XML 模糊器 untidy http so
  • 在 JEditorPane 中突出显示一个单词

    我必须突出显示某个单词在JEditorPane 为此 我使用以下代码 try javax swing text DefaultHighlighter DefaultHighlightPainter highlightPainter new
  • 是否可以通过用户操作或手动管理的触发器来解决 Promise?是的,所以我们能够形成可编辑的承诺

    我希望程序在完成某些用户操作后运行一系列操作 然而 链的一部分将需要等待先前 Promise 的解决或用户已执行某些操作的事实 Promise 可以这样工作吗 我想象理想的程序脚本是这样的 var coreTrigger Promise a
  • C# 中的日期和时间转换 - DateTime.ParseExact() 未按预期工作

    我有日期 时间格式 例如 2013 年 3 月 1 日 92230 根据这个文件 http msdn microsoft com en us library 8kb3ddd4 aspx and 这个链接 http www geekzilla
  • 在Web-Worker中同步等待消息

    是否有某种方法可以同步等待或检查网络工作人员中的新消息 我有一大堆复杂的代码 从 emscripten 编译的 LLVM 我无法围绕回调进行重构 我需要确保在收到并处理来自 UI 线程的消息之前 特定行之后的代码不会执行 如果我用 whil