在momoLua环境下运行
1. momoLua与引擎Lua的通信
目前引擎Lua、Lua native以及Lua native不同页面之间没有方便统一的互通渠道。因此设计BroadcastChannel实现跨lua虚拟机通信。(BroadcastChannel 是 W3C 规范中的一部分)
创建一个特定频道的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规范里对传递的对象浅拷贝.