当前位置: 首页 > news >正文

网站建设企业建站北京做网站哪里好

网站建设企业建站,北京做网站哪里好,定制型网站制作明细报价表,文创产品设计手绘简介 MessageChannelMain 是 DOM MessageChannel 对象的主进程等价对象。 它的特有功能是创建一对已连接的 MessagePortMain 对象。 Electron 本身为了灵活追加 on("message") 机制,就说明该 MessageChannelMain 已经被创建了,而 Web 开发中&a…

简介

  1. MessageChannelMain 是 DOM MessageChannel 对象的主进程等价对象。 它的特有功能是创建一对已连接的 MessagePortMain 对象。

    1. Electron 本身为了灵活追加 on("message") 机制,就说明该 MessageChannelMain 已经被创建了,而 Web 开发中,是没有这种权限自由开进程,然后再把 port 塞过去的,所以消息不会丢失,但是 Electron 这种操作非常多,所以,要先写好 port.on("message"),再启动 port.start()避免消息丢失,这是和 MessageChannel 一个大区别

    2. MessagePortMain 是 DOM MessagePort 对象的主进程等价对象。 它的行为类似于DOM版本,不同的是它使用 Node.js EventEmitter 事件系统,而不是 DOM EventTarget 系统。 这意味着你应该用 port.on('message', ...) 来监听事件, 来代替 port.onmessage = ... 或 port.addEventListener('message', ...)

    3. 针对 b 能把你坑哭,尤其你不知道 MessageChannel 是啥的人,在了解了之后,第一反应就是 MessageChannel 的案例,结果不运行,是不是很尴尬?这里特别提醒

    4. MessageChannel 是什么,请参考HTML5 API 多端通信桥 MessageChannel 技术_森叶的博客-CSDN博客 

    5. Electron 官方文档

助记解释

  1. MessageChannelMain 可以理解为一个独立的协程队列,提供的两个 port 之间互为对方的管道,port2 发送消息的队列会提取出来发给我 port2,同理 port2 的生产的消息也会发给我 port1,因此你在创建了MessageChannelMain 之后呢就可以开始生产消息了,但是你没 port1.start()时,port1.on("message",() => {}) 是不会被消费的。

  2. 上面这个结论就是如果你发多了消息,如果没有及时释放,应该都会存在这个队列里,如果一直不打开 port.start(),理论上内存会一直上涨,不打开 port.start()也是一个 bug 了,但是有可能,比如创建了之后,消费者因为什么原因没启动起来,只有生产者再发,就导致了内存溢出。

  3. MessageChannel 是 HTML5 API 的产物,只适合 Web 环境下的互相通信,不适合 Electon 进程级别的通信,所以 Electron 就搞了一个 MessageChannelMain ,这个可以在任意进程中来去自如。

问题

  1. 主进程创建了这个通信桥如何分发给其他各种进程?

    1. 渲染进程和工具进程(utility-process)

  2. 其他进程如何接收 port?

    1. 渲染进程、webview、utility-process(工具进程)

  3. 其他进程如何通过 port 收发信息?

渲染进程直接和 webview 标签的 preload.js 通信

深度传递时,要注意 webview 加载完毕后,再发过去,不然可能导致没收到的尴尬问题

// 在主进程中
const { MessageChannelMain } = require('electron');const channel = new MessageChannelMain();// 这里意味着可以做一个定时轮询数据库操作 等到 webview 完成加载后再发过去
senderWebContents.once('did-finish-load', () => {senderWebContents.postMessage('channel', null, [channel.port1]);
});containerWebContents.once('did-finish-load', () => {containerWebContents.postMessage('channel', null, [channel.port2]);
});// 在sender渲染进程中
const { ipcRenderer } = require('electron');ipcRenderer.on('channel', (event, ports) => {const port = ports[0];port.postMessage('Hello from sender!');port.on("message", (e) => {console.log("sender renderer receive message:", e.data);})//下面这个绝不能少port.start();
});// 在container渲染进程中
const { ipcRenderer } = require('electron');ipcRenderer.on('channel', (event, ports) => {const port = ports[0];const webview = document.querySelector('webview');webview.send('channel', port);
});// 在webview的preload.js中
const { ipcRenderer } = require('electron');ipcRenderer.on('channel', (event, port) => {port.on('message', (event) => {console.log(event.data);  // 打印 "Hello from sender!"});// 下面这个绝不能少port.start()
});

 utility-process 和 MessageChannelMain

Electron 工具进程utilityProcess 使用中遇到的坑点解决方案_森叶的博客-CSDN博客

http://www.yayakq.cn/news/621186/

相关文章:

  • 建设网站商城需要多少费用网站程序的构成
  • 公司网站首页如何做网站建设任务和标准
  • c sql网站开发网络规划设计师教程第2版pdf百度
  • 秦皇岛网站推广哪家好做电子相册的网站
  • 网站开发程序哪个好会员注册网站怎么做
  • o2o网站建设基本流程站长工具的使用seo综合查询运营
  • 通过apache建设网站彩票网站建设多少钱
  • 网站开发设计教程做任务挣钱的网站app
  • 做网站送的小程序有什么用无锡建设公司网站
  • 网站建设人员构成网站开发和报价方案
  • 永久免费网站系统深圳网站制作建设公司
  • 视频直播网站开发流程优搜云seo
  • 做网站1g1核够吗金融公司网站开发费用入什么科目
  • 鞋帽箱包网站建设木卢seo教程
  • 怎么添加网站备案号高端企业网站建设制作
  • 网站主页图片尺寸windows优化大师免费版
  • app和网站开发区别html5网站链接标签
  • 做网站赚金币贵阳最新消息今天
  • 合肥网站建设哪个好站长工具爱站网
  • 四川鸿业建设集团公司网站河北建设厅查询网站首页
  • 福州建站服务管理临清网站建设公司
  • 潍坊住房和城乡建设局招标网站wordpress 移动
  • 网站注册完域名如何建站公众号平台建设网站
  • 海贼王路飞和女帝做的网站app备案查询网站
  • 网站的费用多少低代码无代码开发平台
  • 在四川省住房和城乡建设厅网站上查公司标志设计
  • 网站正在建设中页面的英文合肥宣传片制作公司六维时空
  • 移动设备网站开发注意点搜索引擎营销简称seo
  • 长宁企业网站制作网站优化搜索排名
  • 建设信用卡在网站挂失块吗wordpress网址主题