内部rpc调用
关联文件
最常用API
M:register(…) 注册访问。(没有注册访问的,去创建对象访问都会报错),这个服务start之后就不能再调用。
参数:module_name列表。M:new(module_name,instance_name,can_switch_func) 创建调用对象。
参数:
* module_name(string) 模块名称,需要send或者call通信的模块名称(相当于一级索引)。
* instance_name(string) 实例名称,它是模块的二级分类(相当于二级索引)。
* can_switch_func(function) 是否可以切换服务(不传默认可以)。
返回值:
1. client(table) rpc客户端对象。M:instance(module_name,instance_name) 使用单例访问对象(很多时候并不需要创建管理rpc调用对象)。
参数:
* module_name(string) 模块名称,需要send或者call通信的模块名称(相当于一级索引)。
* instance_name(string) 实例名称,它是模块的二级分类(相当于二级索引)。
返回值:
1. client(table) rpc客户端对象。M:mod_send(…) 使用mod方式映射到一个server,之后用send方式给server发送消息(适用与长期与指定的服务联系)。
参数: server接受的参数。
返回值: 无。
mod模式解释:假设server启动了6个,本服务的handle为7,取到的对应server handle为server_handle_list[7 % 6 + 1]。M:mod_call(…) 跟mod_send一致,唯一区别是使用call的方式发消息。
M:set_mod_num(num) 设置mod值,没有设置的情况下,默认使用本服务的handle,用于解决有时候需要使用角色id来做映射。
参数:
* num(number) mod使用值。
返回值:无M:balance_send(…) balance简单负载均衡,之后用send方式给server发送消息(适用与需要提高负载)。
参数: server接受的参数。
返回值: 无。
balance模式解释: 假如server启动了6个,就会有server的handle列表,这种模式会1,2,3,4,5,6,1这样轮询的访问。M:balance_call(…) 跟balance_send一致,唯一区别是使用call的方式发消息。
M:mod_send_by_name(…) 假如server启动了6个,3个instance_name为A,3个为B。这种方式基于指定的instance_nameserver_handle_list取映射。
M:mod_call_by_name(…) call方式。
M:balance_send_by_name(…) balance模式,send方式。
M:balance_call_by_name(…) balance模式,call方式。
M:set_instance_name(name) 设置instance_name。
不常用API
- M:broadcast(…) 广播。
- M:broadcast_call(…) 广播调用。
- M:broadcast_by_name(…) 通过instance_name广播。
- M:broadcast_call_by_name(…) 通过instance_name广播调用。
- M:set_week_visitor(…) 设置弱访问者,如果业务逻辑实在有环访问问题,可以使用这个设置。
- M:monitor_all() 监听所有的可热更服务地址,用于解决启动时,不确定访问哪些服务。
- M:CMD(cmd) 扩展CMD,不能热更服务需要扩展的CMD的命令。
使用注意点:
服务start之前不能使用rpc调用,因为服务还没有准备好,如果这样使用会抛出错误。
如果实在要在start中去rpc调用:
可以用fork包裹。
1 |
|
总结
已经坚持完善skynet_fly有半年多了,新年第一篇。新年快乐!!!