JS:MessageChannel

2023-11-08

MessageChannel API

MessageChannel 为通信管道对象,使用 MessageChannel 构造函数将返回一个 MessageChannel 对象,返回的对象中包含两个 MessagePort 对象,可以实现双端通信。
MessageChannel的onmessage回调属于宏任务。

// 创建 MessageChannel 新实例对象
var channel = new MessageChannel();

// MessageChannel实例默认具有port1和port2两个对象属性
var port1 = channel.port1;
var port2 = channel.port2;

// MessageChannel实例onmessage事件可以实现监听并绑定回调函数
port1.onmessage = function(event) {
    console.log("port1收到来自port2的数据:" + event.data);
}
port2.onmessage = function(event) {
    console.log("port2收到来自port1的数据:" + event.data);
}

// MessageChannel实例postMessage方法可以触发onmessage事件
port1.postMessage("发送给port2");
port2.postMessage("发送给port1");

MessageChannel 结合 Web Worker 可以实现多线程通信:

// main.js
let worker1 = new Worker('./worker1.js');
let worker2 = new Worker('./worker2.js');
let ms = new MessageChannel();

// 把 port1 分配给 worker1
worker1.postMessage({ name: 'port', port: ms.port1 }, [ms.port1]);
// 把 port2 分配给 worker2
worker2.postMessage({ name: 'port', port: ms.port2}, [ms.port2]);

以上代码把消息通道的 port1 和 port2 分别分配给了 worker1和 worker2,即用消息通道将两个 worker 给连接起来。

关于 postMessage
Web Worker 的 postMessage 方法 可接收两个参数:
message: 消息内容,可以是任意基础数据类型或ArrayBuffer、MessageChannel、ImageBitmap等实例对象
transferList: 可选,包含被传输对象的数组,数组中的对象的所有权会转移给当前调用postMessage 方法 的Web Worker

// worker1.js
self.onmessage = function(e) {
    if (e.data.name === 'port') {
        const port = e.data.port;
        port.postMessage("Hi! I'm worker1");
    }       
}
// worker2.js
self.onmessage = function(e) {
	if (e.data.name === 'port') {
        const port = e.data.port;
      	port.onmessage = function(event) {
             console.log(event.data);
        }
    } 
}

代码运行时,worker1 中通过 port1 发送消息,然后 worker2 就能从 port2 中接收到消息。

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

JS:MessageChannel 的相关文章

  • ES6之Map和Set有什么不同?

    一 Map 1 定义 Map是ES6提供的一种新的数据结构 它是键值对的集合 类似于对象 但是键的范围不限于字符串 各种类型的值都可以当做键 Object结构是 字符串 值 的对应 Map结构则是 值 值 的对应 2 代码示例 Map本身是
  • 【每日一练】79—CSS实现扫描二维码动画

    二维码的应用越来越普通 加个好友 付个款 做个核酸 想去一个地方 还要扫个场所码 总之 需要二维码的地方越来越多 因此 在这样的大环境里 如何让你的码与众不同 引人注意 就显得非常重要 今天我们就来练习一个二维码的动画效果 具体效果如下 看
  • html中使用js实现体彩11选5随机选号

    体彩11选5随机选号 页面预览 代码实现
  • Html如何引用公用的JS和CSS

    1 问题原因 项目开发几乎每个Html都会引用JS和CSS 那么就会有一些常用JS或者CSS 我们不希望每个Html文件都引用一堆文件 而是只引用公用的JS和CSS就可以了 2 解决办法 2 1定义commonJs js添加公用的JS文件引
  • 元字符的详细解析

    上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义 但是如果我们只知道那些元字符的含义 不知道怎么使用和加以练习 那么对于正则我们还只是看见了门槛 并没有踏入 那么本篇文章就让我们迈起脚步正式走入正则的世界吧 let s go 我的学
  • js制作简单的轮播图

    实现原理 首先定义一个div 设置width和height 然后在这个div里面再定义一个div2 该div的宽度为父div的宽度的n倍 其中n表示图片的张数 在这个div2里面放置需要进行轮播的所有图片 设置每张图片的宽度为一个最外层父类
  • 问题记录:js的=>和function

    这个问题搞了一整天 是这么一个功能
  • Ajax核心技术之XMLHttpRequest对象

    XMLHttpRequest对象到底是什么 跟Ajax到底有什么联系 在了解它之前还是要先了解一下Ajax的功能 与以往的技术不同 Ajax是为了实现异步操作 那么关于异步 好像一个管理者安排好一个项目计划后 将这个项目交给下属去做 而自己
  • IntelliJ IDEA 15款 神级超级牛逼插件推荐(自用,真的超级牛逼)

    来源 http suo im 5X5Rql 满满的都是干货 所有插件都是在 ctrl alt s 里的plugins 里进行搜索安装 1 CodeGlance 代码迷你缩放图插件 2 Codota 代码提示工具 扫描你的代码后 根据你的敲击
  • postMan使用技巧

    使用postMan调试接口 一些接口要实现登录才能访问 即要还token才能访问 一般登录后 拿到token才复制到其他接口下添加token变量 如些复制感觉是挺麻烦的 这时我们可以设置postman的全局变量 操作如下 添加调试环境和全局
  • 通过js在ul中插入10000个li,点击li打印出li的序号

    第一种 直接ul插入 花费了119ms 164ms window onload function let now new Date let ul document querySelector ul for let i 0 i lt 1000
  • 网页是如何显示在浏览器

    这两天学习了一些网页如何在浏览器中显示的知识 感觉在我向前端走的路上非常有用 所以就在这里总结一下 大家可以看看 我也算是巩固一下知识 因为自己学识太浅 内容可能有一些错误之处 希望看到的朋友可以指出来啦 在Edge浏览器也加入Chromi
  • html标签中src=“图片路径”,怎么用变量替换路径

    div style background image none bg0 gif bg5 gif div
  • 用于富 Web 开发的 13 个免费 JavaScript 库和插件

    在这个新的一天伴随着最新技术崛起的舞台上 让您的商业品牌绽放光芒的唯一方法就是紧跟市场流行的趋势 使用 HTML 和 JavaScript 等技术是通过其中使用的一流功能获得盈利业务的灵魂 当从技术角度谈论 JavaScript 时 考虑到
  • js 手机、邮箱、身份证格式验证

  • 微信小程序之map地图规划路线以及显示距离

    有个问题 在选择公交路线 包含步行和公交 时 怎么才能让不同的路线显示不同的颜色 ps 有个方式 自己写坐标解压往后的存入新数组 把步行时的数据标注下 有什么简单的方法呢 自定义函数文件 自动获取定位信息 function getLocat
  • react(craco)移动端使用postcss-px-to-viewport自适应布局

    Craco 使用postcss px to viewport devDependencies craco craco 6 4 3 xianzhengquan postcss px 2 vw 0 0 1 postcss 8 3 0 peerD
  • WPF 路径动画PathAnimations的使用

    在wpf中让一个控件按照一定的路径运行的动画 叫做路径动画 这个示例演示了让一个rectangle按照一个s形曲线反复运行的动画 效果 只有一个文件 全部代码如下
  • 验证微信号的正则表达式

    var wxreg a zA Z 1 a zA Z0 9 5 19
  • 大数相乘,限制:不可用 BigInt

    大数相乘 限制 不可用 BigInt 大数相乘 限制 不可用 BigInt 例如 输入 a 11111111111111111111 b 22222222222222222222 返回 246913580246913580241975308

随机推荐

  • 哈尔滨工业大学21年计算机考研情况 学硕复录比超2:1?复试竞争激烈!

    https mp weixin qq com s U0LpgUuUHnYyt7bf 6eCCg
  • 支付系统就该这么设计(万能通用),稳的一批!

    作者 PetterLiu 来源 www cnblogs com wintersun 支付永远是一个公司的核心领域 因为这是一个有交易属性公司的命脉 那么 支付系统到底长什么样 又是怎么运行交互的呢 抛开带有支付牌照的金融公司的支付架构 下述
  • Can't connect to activity manager; is the system running 问题探究及解决

    一 文档概述 本文旨在记录错误信息Error type 2 android util AndroidException Can t connect to activity manager is the system running 问题分析
  • 学习ORACLE-物化视图(MATERIALIZED VIEW)总结

    数据仓库项目中使用物化视图推送数据 现记录一下相关方面的知识 物化视图需要有基表 基表可以在本地库 也可以在远程库 可以在本地通过数据库链接访问远程库的基表 基表 hr departments orcl 物化视图 scott departm
  • google可视化编程工具blockly介绍

    1 什么是blockly blockly是google发布的可视化编程工具 是一个可用于Web Android iOS的可视化代码编辑器库 blockly有几个特点 它是纯粹的javascript库 它是100 面对客户端的 没有任何服务端
  • Cesium中文教程-空间数据可视化Visualizing Spatial Data(一)

    目录 3 空间数据可视化 Visualizing Spatial Data 1 实体API What is the Entity API 2 第一个实体 Our First Entity 3 图形和容器 Shapes and Volumes
  • 30. PyQuery: 基于HTML的CSS选择器

    目录 前言 导包 基本用法 按标签选择 标签链式操作 简便链式 后代选择器 类选择器 id 选择器 属性 文本选择器 重点 改进多标签拿属性方法 快速总结 PyQuery的强大功能 修改源代码 添加代码块 修改 添加属性 删除属性 标签等
  • 我写CSS的常用套路(附demo的效果实现与源码)

    作者 alphardex https juejin im post 5e070cd9f265da33f8653f0 前言 本文是笔者写CSS时常用的套路 不论效果再怎么华丽 万变不离其宗 1 交错动画 有时候 我们需要给多个元素添加同一个动
  • celery 简要概述

    文章目录 1 celery 简要概述 1 1 celery 可以做什么 2 celery 的核心模块 2 1 celery 的5个角色 3 celery 和flask 如何结合起来 3 1项目结构 3 2 项目入口 文件 routes py
  • SQLRecoverableException: Closed Connection

    目录 问题描述 解决过程 问题描述 事情是这样子的 公司线上oracle数据库因为等保评估突然设置了idle time 设置成10分钟了 如果不设置idle time 默认是 UNLIMITED 则连接始终不会被断开 这就占用了连接数资源
  • flutter使用坑点记录

    container点击失效 一般container点击 可能会在container外包一层 GestureDetector 有时候你会发现点击事件无效或是只有点击了文字或图片之后才会触发点击事件 解决办法 1 为Container设置背景颜
  • 免费微信小程序商城源代码,基于Uni-App,实现一码多端

    微信商城功能介绍 购物流程 符合大众习惯的首页 分类 商品展示 下单流程 智能搜索商品 会员体系 手机号登录 微信登录 用户积分 商品收藏 商品评论 足迹 营销工具 满额包邮 优惠券 满减和满折扣 定向发放 积分抵扣 10级定价 订单管理
  • 2.2.4 读取EXCEL数据与Error: ‘\U‘ used without hex digits in character string starting ““C:\U“报错

    当我们需要用R读取EXCEL数据时我们应首先在R程序中输入以下命令 install packages xlsx repos https mirrors ustc edu cn CRAN 来安装读写 Excel 文件需要安装扩展包 当安装完成
  • ps景观平面图转鸟瞰图_ps如何制作鸟瞰图 ps制作鸟瞰图教程

    ps如何制作鸟瞰图 大家都知道ps是一款强大的制图绘图工具 而在我们制作规划图的时候 鸟瞰图是最好的展示图 那么ps就派上用场了 使用ps制作的鸟瞰图可以杜绝凭空想象的随意性 让整个图变得更加的精确 那么下面我们就一起来看看吧 1 拿相机拍
  • 正则 去掉括号内的内容

    前言 刚开始以为 就是括号内任意字符了 试了不行 错误点 1 括号需要转移 是正则表达式关键字 2 不是任意字符 而是 除了右括号的任意字符 String content i want to thank you thank very dfl
  • 嵌入式Linux人脸检测libfacedetection

    人脸检测 此库依赖Opencv 所以首先要移植Opencv到板子上 笔者使用LVGL搭建了一个界面 界面有些卡顿 主要原因是文件存取较慢 演示效果如下 OpenCV 首先要交叉编译Opencv 参考 https blog csdn net
  • 统计学——简单理解方差分析

    方差分析 方差分析 analysis of variance 简写为ANOVA 指的是利用对多个样本的方差的分析 得出总体均值是否相等的判定 它是一种分析调查或试验结果是否有差异的统计分析方法 也就是检验各组别间是否有差异 方差分析按照以下
  • linux 网卡队列深度,linux 磁盘队列深度nr_requests 和 queue_depth

    nr requests 和 queue depth 修改配置值 nr requests 和 queue depth 区别 iostat 的avgqu sz lsscsi l 的队列大小 iostat nr requests 和 queue
  • MOEA/D 算法详解

    MOEA D 笔记 1 聚合方法 1 1 权重求和法 Weighted Sum Approach 1 2 切比雪夫聚合法 Tchebycheff Approach 1 3 边界交叉法 Boundary Intersection Approa
  • JS:MessageChannel

    MessageChannel API MessageChannel 为通信管道对象 使用 MessageChannel 构造函数将返回一个 MessageChannel 对象 返回的对象中包含两个 MessagePort 对象 可以实现双端