💡 觉得不错,不妨点个 Star 吧!你的 Star 是作者持续创作维护的最大动力!
QQ 交流群:102993581
📌 镜像仓库:网络不好可以去 Gitee Clone
skynet_fly 是基于 skynet 扩展的高性能游戏服务器框架,专注于快速开发 Web 服务、游戏服务器及需要 RPC 调用的分布式系统。
基于 skynet 自维护版本,针对服务端开发做了深度优化和扩展。
- ✅ 支持不停服更新
- ✅ 一键生成配置文件和运维脚本
- ✅ 完善的热更新机制,确保服务平滑过渡
- ✅ Gate/WebSocket Gate 基础设施封装
- ✅ 支持 Protobuf、JSON、Sproto 多种协议
- ✅ 房间匹配系统完整实现
- ✅ 开箱即用的游戏业务框架
- ✅ ORM 对象关系映射
- 支持 MySQL、MongoDB 等多种数据库
- 数据库无缝切换
- 智能缓存策略,提升性能
- CRUD 操作简单高效
- ✅ Redis、MySQL、Timer、Log 使用封装
- ✅ 远程 RPC 调用
- ✅ 远程 Sub/Pub 消息订阅
- ✅ 远程 SubSync/PubSync 同步订阅
- ✅ 服务发现机制
- ✅ HTTP 长连接支持
- ✅ 路由与中间件模式
- ✅ JWT 鉴权集成
- ✅ 内置日志分割
- ✅ 时间快进功能(测试神器)
- ✅ 断点调试支持
- ✅ Lua 代码加密
- ✅ 服务行为完整录制
- ✅ 录像重放调试
- ✅ 快速定位复杂 Bug
- ✅ 自动热更记录和共享配置管理
运行 examples/AB_question 示例,演示 A 服务向 B 服务发送消息并接收回应。
cd examples/AB_question/
sh ../../binshell/make_server.sh ../../
sh make/script/run.sh load_mods.lua 0
A 服务发送消息:
function CMD.send_msg_to_b()
-- 简单轮询负载均衡
for i = 1, 4 do
local ret = container_client:instance("B_m"):balance_call("hello")
log.info("balance_call send_msg_to_b:", i, ret)
end
-- 模除映射方式(固定服务)
for i = 1, 4 do
local ret = container_client:instance("B_m"):set_mod_num(1):mod_call("hello")
log.info("mod_call send_msg_to_b:", i, ret)
end
-- 广播到所有 B_m 服务
local ret = container_client:instance("B_m"):broadcast_call("hello")
log.info("broadcast_call:", ret)
end
B 服务响应:
function CMD.hello()
return "HELLO A, I am " .. skynet.address(skynet.self())
end
- 修改
B_m.lua文件 - 执行热更新脚本:
sh make/script/check_reload.sh load_mods.lua
旧服务将在确认无访问者后优雅退出,新服务无缝接管请求。
运行 examples/digitalbomb 数字炸弹游戏示例。
cd examples/digitalbomb/
sh ../../binshell/make_server.sh ../../
sh make/script/run.sh load_mods.lua 0
- ✅ 基于 TCP 长连接
- ✅ 支持不停服更新
- ✅ 登录、大厅、匹配、游戏模块解耦
- ✅ 内置测试客户端
可热更新模块:
hall- 大厅服务alloc- 分配服务table- 桌子服务
运行 examples/webapp Web 应用示例。
cd examples/webapp/
sh ../../binshell/make_server.sh ../../
生成的运维脚本:
run.sh- 启动服务stop.sh- 停止服务restart.sh- 重启服务reload.sh- 热更新模块check_reload.sh- 检测并热更新fasttime.sh- 时间快进
# 前台运行
sh make/script/run.sh load_mods.lua 0
# 后台运行
sh make/script/run.sh load_mods.lua
浏览器打开:http://x.x.x.x:8688
# 1. 修改代码
vim webapp/lualib/webapp_dispatch.lua
# 2. 执行热更新
sh make/script/check_reload.sh load_mods.lua
# 1. 克隆项目
git clone https://github.com/huahua132/skynet_fly
# 2. 安装依赖(根据系统选择)
sh install_centos.sh
# 或
sh install_ubuntu.sh
# 3. 编译
make linux
基于 Visual Studio 2022,需要安装:
OpenSSL 配置:
如果链接出错,请下载 OpenSSL 完整版 MSI 安装包,替换 win3rd/include 和 win3rd/lib 目录。
💡 参考 Pluto 项目 的编译方式
| 组件 | 版本 | 说明 |
|---|---|---|
| skynet | latest | 自维护 Fork 版本 |
| basexx | 0.4.1 | Base 编码 |
| lua-cjson | latest | JSON 解析 |
| lua-openssl | 0.9.1-0 | OpenSSL 绑定 |
| lua-protobuf | 0.4.0 | Protobuf 支持 |
| lua-radix-router | latest | 路由器 |
| luafilesystem | 1.8.0 | 文件系统 |
| luajwtjitsi | 3.0 | JWT(已适配 lua-openssl) |
| lzlib | 0.4.3 | 压缩库 |
| lua-zset | latest | 有序集合 |
| lua-snapshot | latest | 快照工具 |
| lua-socket | latest | Socket 库 |
| LuaPanda | latest | 调试器 |
| wlua | latest | Lua 工具 |
🎮 完整示例项目
♟️ 中国象棋 - 完整的在线对战游戏实现
-
- 对象关系映射实现
- 多数据库适配
- 缓存策略优化
-
📖 服务录像与重放
- 完整录制服务行为
- 精准重放调试
- Bug 快速定位
本项目采用 MIT 协议开源,详见 LICENSE 文件。
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!
Made with ❤️ by huahua132
感谢所有为 skynet_fly 做出贡献的开发者!
感谢以下贡献者提交的 Pull Request,让项目变得更好:
- 🌟 所有提交 PR 的朋友
- 🐛 提交 Issue 和 Bug 报告的朋友
- 💡 提供建议和想法的朋友
- 📖 完善文档的朋友
我们欢迎所有形式的贡献!
- 🍴 Fork 本项目
- 🔨 创建你的特性分支 (
git checkout -b feature/AmazingFeature) - 💾 提交你的修改 (
git commit -m 'Add some AmazingFeature') - 📤 推送到分支 (
git push origin feature/AmazingFeature) - 🎉 提交 Pull Request
贡献指南:
- 遵循项目的代码风格
- 提交前请测试你的代码
- 提供清晰的提交信息
