watch_syn.lua 监听同步机制
watch_syn.lua
sever
- M.new_server(CMD)
函数作用域:M 对象的成员函数
描述: 创建一个发布者对象,需要在代码load中创建好。
参数:
- CMD (table): 模块的CMDtable
返回值:- server_obj(table): 发布者对象
为什么需要传递CMD,因为发布者需要创建watch和unwatch两个接口,还有如果是热更服务还需要处理fix_eixt,cancel_exit的回调。
server:register(name, init_v)
函数作用域:M.new_server 对象的成员函数
描述: 注册一个key-value值
参数:
- name (string): 名称
- init_v (any): 初始值
返回值:- server_obj(table): 发布者对象
server:publish(name, new_value)
函数作用域:M.new_server 对象的成员函数
描述: 发布新值,同时通知订阅者
参数:
- name (string): 名称
- new_value (any): 新值
返回值:
无
client
- M.new_client(rpc_interface)
函数作用域:M 对象的成员函数
描述: 创建一个订阅者对象
参数:
- rpc_interface (table): watch接口,需要实现send,call方法。
返回值:- client_obj(table): 订阅者对象
因为server可能是在可热更模块服务中创建,也可能在普通的skynet服务中,所有就抽象出了接口,用于适配这两种情况。
service_watch_interface.lua
在普通的skynet服务中使用
1 |
|
contriner_watch_interface.lua
在可热更模块服务中使用
1 |
|
- client:watch(name)
函数作用域:M.new_client 对象的成员函数
描述: 监听name
参数:
- name (string): 名称
返回值:- ret(bool): true
重复监听会断言
client:is_watch(name)
函数作用域:M.new_client 对象的成员函数
描述: 是否还监听了此name
参数:
- name (string): 名称
返回值:- ret(bool): true or false
client:unwatch(name)
函数作用域:M.new_client 对象的成员函数
描述: 取消监听
参数:
- name (string): 名称
返回值:
无
没有监听取消会断言
- client:get(name)
函数作用域:M.new_client 对象的成员函数
描述: 获取name的值
参数:
- name (string): 名称
返回值:- value
没有监听会断言
监听的,可能值还没有返回。
- client:await_get(name)
函数作用域:M.new_client 对象的成员函数
描述: 获取name的值(至少第一次结果已经返回)
参数:
- name (string): 名称
返回值:- value
还没有拿到第一个值,就会一直等待,直到拿到。
- client:await_update(name)
函数作用域:M.new_client 对象的成员函数
描述: 等待推送新的值,如果是可热更服务也可能是对方下线了。
参数:
- name (string): 名称
返回值:- value
watch_syn.lua 监听同步机制
https://huahua132.github.io/2024/01/28/skynet_fly_api/watch_syn/