关于frpc错误处理的优化 前言之前对于frpc call调用的错误处理,只是简单的打印了日志、返回nil结果,这对于调用处其实不太友好,没法第一时间得知问题所在。 优化方案 新增返回错误码,错误内容,错误方。 取消掉frpc_client call调用出错就打印的日志,交给调用的地方做错误处理决定打不打印日志。 错误码frpc 会出现三种错误。 WAIT_CONNECT_TIME_OUT这种情况就是等待指定时间后还没有 2025-02-10 skynet_fly实现思路历程 #skynet_fly实现思路历程
记录一次使用录像查bug 前言skynet_fly_demo 项目被开着5千机器人跑了一晚上之后,我第二天查下一下有没有啥异常日志,结果发现有一个机器人邮件插入失败,是因为主键冲突,插入的邮件是全服邮件,因为使用的批量插入并没有触发断言,并不能第一时间发现调用来源。只有错误日志。 1234567891011121314151617181920212223242526272829[:0000001a][20250123 05 2025-01-23 skynet_fly实现思路历程 #skynet_fly实现思路历程
季度更新日志2025-1 2025-3 最终还原perl环境 pb 打包sharedata数据应注意先copy 编译好skynet_sly之后,perl没有还原,会影响到系统其他软件正常工作。 pb打包用sharedata共享的table时,数据打包不进去。怀疑是因为sharedata是skynet封装的c object,pb底层无法识别访问,通过先深拷贝sharedata表,再传入pb打包可以规避此问题。 优化sharedata_s 2025-01-09 季度更新日志 > 2025 #季度更新日志
2024 年度总结 前言今年是skynet_fly的第二年,但是这却是skynet_fly的第一篇年度总结,我相信这肯定不是最后一篇,第一年是因为确实没有这个规划,这个想法也是2024的最后一天才有的。想着这一年加了很多新东西,也方便使用者能快速知道这一年更新了什么,也算是对skynet_fly做一个年度回顾吧,可能会有一些遗漏,因为是临时起意,不是修改后立马写记录,只能靠记忆和查阅提交记录来汇总了。来年想着安排一个 2024-12-31 年度总结 > 2024 #年度总结
可热更匹配房间类游戏架构基础设施 客户端 rpc 协议的支持 前言一开始,对与客户端交互协议仅仅提供了name, body,包名加包体的简单打包方式,对于body大家可以自由选择任意编码解码方式(json、protobuff、sproto …)。后面觉得name少许增加了包体大小,就新增了packid,body协议码加包体的方式。这两种方式都没法让客户端rpc调用服务端,客户端在编码时只能监听服务端的各种消息,有时候非常不方便。于是就有打算新增 客户端rpc 2024-12-29 skynet_fly 文档 > 强化篇 #skynet_fly_word
全局唯一ID(guid)的生成 利用雪花算法生成全局GUID。 machine_id 机器号 可分配 8191个 time 时间支持到 21060207 14:28:15 也就是说到这个时间,这个雪花算法就用不了了 incr 同一秒支持分配 262143 分配guid M.new_guid() 函数作用域:M 对象的成员函数 描述: 分配guid 参数: 无 返回值 guid(number): 全局唯一ID 2024-12-01 skynet_fly_api #skynet_fly_api
服务录像与重放 前言对于复杂的业务逻辑,出现的bug,通过日志手段或者review代码都没法查明原因的情况下,这时候我们可以通过服务录像重放来还原整个事故现场。 实现方案skynet是多线程的,不太方便对整个进程进行录像,而对于skynet的单个服务,能保证消息是同步处理的,所以可以比较方便实现对于单个服务录像,可以同时录制多个服务。实现思路就是把所有消息记录下来,重放时读取记录,解析重放即可。其中有一些细节点, 2024-10-27 skynet_fly 文档 > 强化篇 #skynet_fly_word
代码加密 前言很多群友都有加密代码的需求。为了群友辛辛苦苦写的游戏不被人轻易白嫖,这必须得安排上。 实现方案lua加载代码通常都是用loadfile跟require,所以我们可以先把lua文件通过string.dump打成二进制格式,再通过加密算法加密,之后直接使用加密的文件去运行,通过重写loadfile的底层函数,内置解密过程,即可实现代码加密的效果。 如何使用修改解密key修改skynet_fly\s 2024-10-14 skynet_fly 文档 > 强化篇 #skynet_fly_word
sharedata.lua 共享配置数据 sharedata.lua加载配置 M.load(dir_list, mode) 函数作用域:M 对象的成员函数 描述: 以mode方式加载指定dir_list目录列表的lua配置文件 参数: - dir_list (table): 路径列表 - mode (number): 模式 访问对象 M:new(file_path, mode) 函数作用域:M 对象的成员函数 描述: 2024-09-14 skynet_fly_api #skynet_fly_api
共享配置数据 前言由于skynet每个服务都是独立的lua虚拟机,一般游戏开发又需要加载大量的配置文件,如果每个服务都加载一遍,会造成过多的内存浪费,所有skynet就提供了sharedata,sharetable共享配置数据的手段。由于两种方案各有优缺点,所以我在封装实现上让使用者可以任选其一,在make/script增加热更配置命令,方便于热更配置。 优缺点对比sharedata 优点 c内存占 2024-09-14 skynet_fly 文档 > 强化篇 #skynet_fly_word