Chromium源码浅析 --- MessagePort通信的实现

MessagePort是HTML5中新增加的一个API,它能完成不同上下文之间的消息传递,例如Worker上下文与Document上下文之间的通信就是通过MessagePort来实现的,也可以利用MessagePort来实现浏览器中多个标签页之间的通信。MessagePort对象一般封装在MessageChannel中使用,当开发者申请一个MessageChannel对象时,就得到了配对的两个MessagePort,暂且称为port1和port2,此时往port1中发送数据postMessage(“Hello.”),在MessageChannel的另外一个端口port2中就可以通过onmessage函数收到信息”Hello”。熟悉Unix进程间通信的同学们,可能会想到该通信方式与Pipe(管道)很类似。进程或者上下文保留通道的一个端口,另外一个进程或上下文则保留另外一个端口,然后端口的发送和接收功能完成消息的传递。

由于Chromium的多进程架构,每个标签页运行在各自的Render进程中(当然这里有例外,当一个标签页是从某个页面跳转而来,并且在同一域名下时,这时多个标签页可能共享同一个Render进程),这里说一般情况是每个标签页运行在一个Render进程中,现在假设其中一个标签页中的MessagePort需要与另外一个标签也中的MessagePort发送消息时,该如何实现呢?由于每个Render进程不能与其他的Render进程通信,只能与Browser进程发生进程间通信,所以MessagePort之间的消息传递就必须通过Browser进程来周转。

正因如此,Chromium在Browser进程中分配了一序列类似MessagePort的对象,由MessagePortService统一管理,它们与Render进程中的MessagePort一一对

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值