详解skynet 频发的重入问题 例子说明我们假设有2个服务,1个用户。银行服务 提供转账。分控服务 对用户进行风控,提供阻止转账取款功能。用户一 用手机转账。 bank_service.lua 1234567891011121314151617181920local account_amonut_map = {} --账户余额local CMD = {}--转账function CMD 2024-03-24 skynet #skynet_frame
关于skynet_fly_demo的架构设计 架构图 简介skynet_fly_demo是基于skynet_fly框架,开发对战类游戏架构,适用于moba、棋牌类游戏架构。 各服务职责center server 中心服 记录用户账户信息,比如账号,密码,手机号,注册渠道,设备号,平台等等信息。 记录用户创角信息,比如玩家ID,归属大厅服ID等等。 可以记录一些全局唯一的信息,比如登录的公告信息等等。 验证登录服登录。 login serve 2024-02-17 一些想法 #一些想法
关于监听同步模块的封装 为啥需要封装一个监听同步模块?使用skynet开发功能,由于是actor模型,难免会遇到一个服务需要依赖另一个服务的数据的情况,解决这个问题常见的方案有: 封装一个c模块,用于共享数据 优点: API使用简单,get set 即可。 节省内存。 缺点: 编码难度大,风险高,需要处理好多线程编码问题。 需要加读写锁,读取性能不一定高。 lua调用c,没有直接访问lua快。 要用的时候去 2024-01-28 skynet_fly实现思路历程 #skynet_fly实现思路历程
orm ormentry.lua单条数据条目对象。 常用方法 M:get(filed_name) 函数作用域:M:new 对象的成员函数 函数名称:get 描述: 获得对象指定字段的值 参数: - filed_name (string): 字段名 返回值: value(number or string): 值 M:set(filed_name, filed_value) 函数作用域: 2024-01-28 skynet_fly_api #skynet_fly_api
watch_syn.lua 监听同步机制 watch_syn.luasever M.new_server(CMD) 函数作用域:M 对象的成员函数 描述: 创建一个发布者对象,需要在代码load中创建好。 参数: - CMD (table): 模块的CMDtable 返回值: server_obj(table): 发布者对象 为什么需要传递CMD,因为发布者需要创建watch和unwatch两个接口,还有如果是热更服务还 2024-01-28 skynet_fly_api #skynet_fly_api
定时器的使用 timer.lua对skynet的定时器做了基础封装,提供了注销,延时,循环次数,获得下次触发的剩余时间等等功能。 注册 new(expire,times,callback,…) 函数作用域:M 对象的成员函数 函数名称:new 描述: 创建一个定时器对象 参数: - expire (number): 过期时间 100等于1秒 - times (number): 次数,0表示循环触发 2024-01-21 skynet_fly_api #skynet_fly_api
关于skynet_fly 决定web路由工具使用的测试 测试对象 lua-rax lua-radix-router 测试结果lua-radix-router TEST CASE Router number nanoseconds / op QPS RSS static-paths 100000 0.352315 ns 2838369 74.60 MB simple-variable 100000 1.403398 ns 712 2024-01-14 skynet_fly实现思路历程 #skynet_fly实现思路历程
可热更模块的启动配置项 web服务web_master_m max_client 最大同时连接数。 second_conn_limit 相同ip一秒内建立连接数量限制。 keep_live_limit 相同ip保持连接数量限制。 host 无默认0.0.0.0。 port 无 http默认80 https默认443。 protocol 协议 http 或者 https。 web_agent_m protocol 协议 2024-01-14 skynet_fly_api #skynet_fly_api
远程rpc调用 关联文件 frpc_client.lua 最常用API M:new(svr_name,module_name,instance_name) 创建调用对象。 参数: * svr_name(string) 访问节点名称。 * module_name(string) 模块名称,需要send或者call通信的模块名称(相当于一级索引)。 * instance_name(string) 实例名称 2024-01-07 skynet_fly_api #skynet_fly_api
内部rpc调用 关联文件 contriner_client.lua 最常用API M:register(…) 注册访问。(没有注册访问的,去创建对象访问都会报错),这个服务start之后就不能再调用。 参数:module_name列表。 M:new(module_name,instance_name,can_switch_func) 创建调用对象。 参数: * module_name(string) 2024-01-07 skynet_fly_api #skynet_fly_api