{"id":24061020,"url":"https://github.com/dot123/hydraserver","last_synced_at":"2025-02-26T14:26:09.755Z","repository":{"id":271590056,"uuid":"913940074","full_name":"dot123/HydraServer","owner":"dot123","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-13T09:08:59.000Z","size":104,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-13T10:23:17.930Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dot123.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-08T16:35:22.000Z","updated_at":"2025-02-13T09:09:02.000Z","dependencies_parsed_at":"2025-01-08T17:52:59.459Z","dependency_job_id":"fb884536-9646-47cd-93b1-20bfeeed7fe4","html_url":"https://github.com/dot123/HydraServer","commit_stats":null,"previous_names":["dot123/hydraserver"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dot123%2FHydraServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dot123%2FHydraServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dot123%2FHydraServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dot123%2FHydraServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dot123","download_url":"https://codeload.github.com/dot123/HydraServer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240869329,"owners_count":19870760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-09T07:16:12.326Z","updated_at":"2025-02-26T14:26:09.712Z","avatar_url":"https://github.com/dot123.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hydra Game Server\n\n\u003e 一个基于 [Pitaya](https://github.com/topfreegames/pitaya) 开发的高性能、可扩展的游戏服务器脚手架。\n\u003e \n\u003e 类似九头蛇，多个服务器协同工作，组成强大的游戏服务生态。该架构包括网关服务器、HTTP服务器（用于用户注册）、游戏服务器和聊天服务器。\n\n## 系统架构\n\n### 功能说明\n\n1. **Gateway Server（网关服务器）**\n   - 负责请求转发和负载均衡\n   - 维护客户端连接\n   - 路由分发到不同的服务器\n   - 数据压缩传输（msgpack）\n\n2. **HTTP Server（用户注册服务器）**\n   - 提供用户注册接口\n   - 用户数据持久化到 MySQL\n   - 注册成功后返回用户凭证\n\n3. **Game Server（游戏服务器）**\n   - 处理核心游戏逻辑\n   - 游戏状态同步\n   - 数据持久化\n   - 角色数据异步更新机制：\n     - 使用缓存通道（Channel）处理角色数据更新\n     - 后台 goroutine 自动处理数据持久化\n     - 支持数据库和缓存双写一致性\n     - 优化高并发场景下的性能\n\n4. **Chat Server（聊天服务器）**\n   - 处理即时通讯功能\n   - 消息转发\n   - 联盟聊天管理\n   - 联盟信息维护\n\n### 架构图\n\n```\n                    客户端\n                      │\n          ┌──────────┴───────────┐\n          │                      │\n          ▼                      ▼\n     HTTP服务器              网关服务器 ◄─────┐\n          │                   ▲  │           │\n          │                   │  │           │\n          ▼                   │  ▼           │\n        MySQL            游戏服务器 ◄────► 聊天服务器\n                            │  │           │\n                            │  │           │\n                            ▼  ▼           ▼\n                          MySQL Redis     Redis\n\n```\n\n- **Gateway Server**: 网关服务器，负责请求转发和负载均衡\n- **HTTP Server**: Web API服务器，处理HTTP请求\n- **Game Server**: 游戏服务器，处理核心游戏逻辑\n- **Chat Server**: 聊天服务器，处理即时通讯功能\n\n### 数据流说明\n\n1. **客户端接入**\n   - 注册流程：\n     - 客户端 → HTTP服务器：发送注册请求\n     - HTTP服务器 → MySQL：存储用户数据\n     - HTTP服务器 → 客户端：返回注册结果\n   - 游戏流程：\n     - 客户端 → 网关服务器：游戏和聊天功能\n     - 网关服务器：负责转发到对应的服务器\n     - 玩家下线处理：\n       - 网关服务器检测到玩家断开连接\n       - 通知游戏服务器保存玩家数据到 MySQL\n       - 清理 Redis 中的玩家缓存数据\n       - 释放相关会话资源\n\n2. **服务层通信**\n   - HTTP服务器：\n     - 只处理用户注册\n     - 与 MySQL 交互存储用户数据\n     - 不参与游戏逻辑通信\n   - 游戏相关服务器（通过 NATS）：\n     - 网关服务器 ←→ 游戏服务器：实时游戏数据、玩家状态同步\n     - 网关服务器 ←→ 聊天服务器：聊天消息、在线状态\n     - 游戏服务器 ←→ 聊天服务器：游戏内聊天、队伍通信\n\n3. **存储层**\n   - MySQL：\n     - 存储用户注册信息（HTTP服务器）\n     - 存储游戏数据和玩家信息（游戏服务器）\n   - Redis：\n     - 游戏服务器：游戏状态缓存、临时数据\n     - 聊天服务器：联盟信息、消息缓存\n\n4. **消息队列**\n   - NATS：作为核心消息队列，实现所有服务器之间的互相通信\n\n## 环境要求\n\n### 必需组件\n\n1. **Go 1.22**\n   - Windows: 下载安装 [go1.22.windows-amd64.msi](https://golang.org/dl/)\n   - Linux: `wget https://golang.org/dl/go1.22.linux-amd64.tar.gz`\n\n2. **MySQL 5.7**\n   - Windows: [MySQL Community Server 5.7](https://downloads.mysql.com/archives/community/)\n   - Linux: `sudo apt-get install mysql-server-5.7`\n\n3. **NATS 2.9.23**\n   - Windows: [nats-server-v2.9.23-windows-amd64.zip](https://github.com/nats-io/nats-server/releases/tag/v2.9.23)\n   - Linux: `wget https://github.com/nats-io/nats-server/releases/download/v2.9.23/nats-server-v2.9.23-linux-amd64.tar.gz`\n\n4. **Redis 7.2.5**\n   - Windows: [Redis-Windows](https://github.com/zkteco-home/redis-windows/archive/refs/tags/7.2.5.0.zip)\n   - Linux: `sudo apt-get install redis`\n\n5. **etcd 3.5**\n   - Windows: [etcd-v3.5.10-windows-amd64.zip](https://github.com/etcd-io/etcd/releases/tag/v3.5.10)\n   - Linux: `sudo apt-get install etcd`\n\n\n## 快速开始\n\n### Windows\n```bash\n# 构建\n./shell/build.cmd\n\n# 运行\n./shell/run.cmd\n\n# 停止服务\n./shell/kill.cmd\n```\n\n### Linux\n```bash\n# 构建\n./debian-shell/build.sh\n\n# 运行\n./debian-shell/run.sh\n\n# 停止服务\n./debian-shell/kill.sh\n```\n\n## 配置文件\n\n所有配置文件位于 `data/conf/` 目录下：\n- `gateserver.toml`: 网关服务器配置\n- `httpserver.toml`: HTTP服务器配置\n- `gameserver.toml`: 游戏服务器配置\n- `chatserver.toml`: 聊天服务器配置\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdot123%2Fhydraserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdot123%2Fhydraserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdot123%2Fhydraserver/lists"}