Skip to content

huahua132/skynet_fly

Repository files navigation

bcgpt_103248334_gemini-2 5-flash-image_img2img_605126473_1024x1024

致力于服务端对 skynet 的最佳实践

GitHub stars GitHub forks License

📖 使用文档 | 🎮 示例项目 | 📚 API文档


💡 觉得不错,不妨点个 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 服务

  • ✅ HTTP 长连接支持
  • ✅ 路由与中间件模式
  • ✅ JWT 鉴权集成

🛠️ 开发工具

  • ✅ 内置日志分割
  • ✅ 时间快进功能(测试神器)
  • ✅ 断点调试支持
  • ✅ Lua 代码加密

📹 服务录像与重放

  • ✅ 服务行为完整录制
  • ✅ 录像重放调试
  • ✅ 快速定位复杂 Bug
  • ✅ 自动热更记录和共享配置管理

📖 详细了解热更新实现
📖 一键构建服务配置


⚡ 快速开始

示例 1:简单热更新服务

运行 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

🔄 热更新测试

  1. 修改 B_m.lua 文件
  2. 执行热更新脚本:
sh make/script/check_reload.sh load_mods.lua

旧服务将在确认无访问者后优雅退出,新服务无缝接管请求。


示例 2:房间类游戏

运行 examples/digitalbomb 数字炸弹游戏示例。

📦 构建并运行

cd examples/digitalbomb/
sh ../../binshell/make_server.sh ../../
sh make/script/run.sh load_mods.lua 0

🎯 特性展示

  • ✅ 基于 TCP 长连接
  • ✅ 支持不停服更新
  • ✅ 登录、大厅、匹配、游戏模块解耦
  • ✅ 内置测试客户端

可热更新模块:

  • hall - 大厅服务
  • alloc - 分配服务
  • table - 桌子服务

示例 3:HTTP 服务

运行 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

🛠️ 编译安装

Linux 环境

# 1. 克隆项目
git clone https://github.com/huahua132/skynet_fly

# 2. 安装依赖(根据系统选择)
sh install_centos.sh
#
sh install_ubuntu.sh

# 3. 编译
make linux

Windows 环境

基于 Visual Studio 2022,需要安装:

OpenSSL 配置:

如果链接出错,请下载 OpenSSL 完整版 MSI 安装包,替换 win3rd/includewin3rd/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 工具

📚 项目示例

官方 Demo

🎮 完整示例项目

完整项目案例

♟️ 中国象棋 - 完整的在线对战游戏实现


🔗 扩展阅读

核心功能详解

📄 License

本项目采用 MIT 协议开源,详见 LICENSE 文件。


如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!

Made with ❤️ by huahua132

🙏 贡献者

感谢所有为 skynet_fly 做出贡献的开发者!

核心贡献者

特别感谢

感谢以下贡献者提交的 Pull Request,让项目变得更好:

  • 🌟 所有提交 PR 的朋友
  • 🐛 提交 Issue 和 Bug 报告的朋友
  • 💡 提供建议和想法的朋友
  • 📖 完善文档的朋友

如何贡献

我们欢迎所有形式的贡献!

  1. 🍴 Fork 本项目
  2. 🔨 创建你的特性分支 (git checkout -b feature/AmazingFeature)
  3. 💾 提交你的修改 (git commit -m 'Add some AmazingFeature')
  4. 📤 推送到分支 (git push origin feature/AmazingFeature)
  5. 🎉 提交 Pull Request

贡献指南:

  • 遵循项目的代码风格
  • 提交前请测试你的代码
  • 提供清晰的提交信息

About

基于云风的skynet,搭建开箱即用的微服务框架,提供优雅的服务热更新

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 10