在momoLua环境下运行

1. momoLua与引擎Lua的通信

目前引擎Lua、Lua native以及Lua native不同页面之间没有方便统一的互通渠道。因此设计BroadcastChannel实现跨lua虚拟机通信。(BroadcastChannel 是 W3C 规范中的一部分)

alt
创建一个特定频道的BroadcastChannel后,该频道所有订阅者都能双工通信。每个订阅者都能收发消息,消息发送者也能收到自己的消息(如果不方便使用,这个地方可以再讨论),不同频道之间不会影响。

调用close方法后,可以退出频道。该方法只关闭自己不影响其他订阅者。当某个虚拟机关闭时,其中所有订阅者都会强制关闭。某个频道的所有订阅者都关闭后,频道会销毁并释放资源。

BroadcastChannel 的构造函数只接受一个参数,“频道名称”(name)

bcChannel = BroadcastChannel("mychannel")

BroadcastChannel包含一下几个属性和方法

  • name: 监听的频道名称,用来区分不同的频道(跨频道不可通信)
  • postMessage: 用于在当前频道中广播消息
  • onmessage: 消息事件的处理函数。在频道中接收到广播消息之后,会给所有订阅者派发消息事件
  • close: 关闭当前频道

示例:
A虚拟机:

local bcChannelA = BroadcastChannel(“mychannel”)
bcChannelA:postMessage(“valueA”)

B虚拟机:

local bcChannelB = BroadcastChannel(“mychannel”)
bcChannelB:onmessage(function(event)
    print(event.data)--“valueA”
    bcChannelB:postMessage(“valueB”)
end
)

这里A、B两个虚拟机都关注了mychannel频道,可以实现双工通信。

BroadcastChannel规范里对传递的对象浅拷贝.

@Copyright © cosmos 2019 all right reserved,powered by Gitbook修订时间: 2021-04-12 18:28:18

results matching ""

    No results matching ""