Skip to content

Repository files navigation

Hai-world

Hai-world 是一个以 Boss 战斗为核心的实时点击小游戏项目,当前实现基于 Vue 3 + Vite + Go(Hertz) + Redis + MongoDB,并已扩展出房间分线、装备与强化、天赋战斗态、任务系统、消息墙、商店外观、后台管理和 OSS 图片上传链路。

当前状态

  • 前端位于 frontend/,不引入路由库,通过 window.location.pathname 切页。
  • 后端位于 backend/,模块路径为 long
  • 实时链路以前端 WebSocket /api/ws 为主,承载 protobuf 二进制消息;链路异常时自动回退到 SSE /api/events
  • Redis 负责热数据;MongoDB 已固定启用,用于冷数据、任务、日志、归档等持久化内容。
  • 运行时配置通过 Consul KV 拉取 YAML;配置变更后进程会主动退出,由外部拉起新进程。
  • 前端构建产物先输出到 backend/public/,再通过 go:embed 编译进后端二进制。

目录入口

项目 Tree(精简)

下面这份目录树基于当前仓库结构整理,保留主要工作目录,省略了 node_modules.git、构建缓存和大体积产物细节。

.                               # 仓库根目录
├── .github/                    # GitHub 平台配置
│   └── workflows/              # GitHub Actions 工作流目录
│       └── build.yml           # 构建与发布流程
├── AGENTS.md                   # 协作规则
├── CLAUDE.md                   # 协作规则镜像文件
├── Dockerfile                  # 容器镜像构建入口
├── Makefile                    # 常用开发命令入口
├── README.md                   # 项目主入口文档
├── backend/                    # Go 后端主目录
│   ├── cmd/                    # 后端可执行程序入口
│   │   ├── backfillbosskills/  # Boss 击杀回填工具
│   │   ├── checkbosskills/     # Boss 击杀核对工具
│   │   ├── internal/           # 命令行工具共享内部代码
│   │   ├── local_click_latency/# 本地点击时延测试工具
│   │   ├── migratecolddata/    # 冷数据迁移工具
│   │   ├── migrateroommodel/   # 房间模型迁移工具
│   │   ├── migratetaskmodel/   # 任务模型迁移工具
│   │   ├── printcfg/           # 配置打印工具
│   │   ├── report/             # 报表工具
│   │   └── server/             # 正式服务启动入口
│   ├── config.example.yaml     # 配置示例
│   ├── config.test.yaml        # 测试配置
│   ├── config.yaml             # 本地默认配置
│   ├── embed_public.go         # 嵌入前端静态资源
│   ├── go.mod                  # Go 模块声明
│   ├── go.sum                  # Go 依赖锁定
│   ├── internal/               # 后端内部业务代码
│   │   ├── admin/              # 后台鉴权与管理能力
│   │   ├── archive/            # 冷数据归档能力
│   │   ├── config/             # 配置加载与校验
│   │   ├── core/               # 核心玩法与状态逻辑
│   │   ├── events/             # 实时事件广播
│   │   ├── httpapi/            # HTTP 与 WebSocket 接口
│   │   ├── mongostore/         # MongoDB 存储实现
│   │   ├── nickname/           # 昵称规则处理
│   │   ├── oss/                # OSS 上传与签名
│   │   ├── playerauth/         # 玩家登录鉴权
│   │   ├── ratelimit/          # 点击限流
│   │   ├── realtimepb/         # protobuf 生成代码
│   │   ├── report/             # 报表查询逻辑
│   │   └── xlog/               # 日志封装
│   ├── public/                 # 前端构建产物目录
│   │   ├── effects/            # 特效静态资源
│   │   ├── favicon.svg         # 站点图标
│   │   ├── icons.svg           # SVG 图标集
│   │   ├── images/             # 页面图片资源
│   │   └── index.html          # 前端入口 HTML
│   └── reports/                # 后端侧报表产物
├── docs/                       # 一次性文档总目录
│   ├── README.md               # docs 索引
│   ├── announcements/          # 版本公告
│   ├── architecture/           # 架构方案
│   ├── archive/                # 历史归档
│   ├── demos/                  # 静态 demo
│   ├── designs/                # 设计与策划案
│   ├── developer-reference/    # 开发参考
│   ├── effects/                # 特效说明
│   ├── implementation/         # 实施记录
│   ├── reports/                # 阶段总结
│   ├── specs/                  # 当前规范
│   └── superpowers/            # 历史 spec/plan 产物
├── frontend/                   # Vue 前端主目录
│   ├── README.md               # 前端局部说明
│   ├── bun.lock                # Bun 依赖锁定
│   ├── index.html              # 前端入口 HTML
│   ├── package.json            # 前端依赖声明
│   ├── public/                 # 原始静态资源
│   │   ├── effects/            # 特效资源
│   │   ├── favicon.svg         # 前端图标
│   │   ├── icons.svg           # 前端图标集
│   │   └── images/             # 前端图片资源
│   ├── src/                    # 前端源码
│   │   ├── App.vue             # 根组件
│   │   ├── assets/             # 源码内静态资源
│   │   ├── components/         # 可复用组件
│   │   ├── main.js             # 前端启动入口
│   │   ├── pages/              # 页面级组件
│   │   ├── proto/              # 前端 protobuf 生成代码
│   │   ├── style.css           # 全局样式
│   │   ├── utils/              # 工具逻辑
│   │   └── viteProxy.test.js   # Vite 代理相关测试
│   └── vite.config.js          # Vite 配置
├── lefthook.yml                # Git hook 配置
├── package.json                # 根目录 Node 脚本声明
├── pixel-assets/               # 像素素材工程目录
│   ├── README.md               # 像素素材说明
│   ├── oss-manifest.json       # OSS 资源清单
│   ├── oss-url-map.json        # OSS URL 映射
│   ├── output/                 # 像素输出产物
│   ├── scripts/                # 像素处理脚本
│   ├── specs/                  # 像素规格定义
│   └── thicken-report.json     # 像素加粗报告
├── scripts/                    # 仓库辅助脚本
│   ├── boss_defeated_count.py  # Boss 击杀统计脚本
│   ├── generate_equip_prompts.py # 装备提示词生成脚本
│   └── move_players_room.sh    # 玩家切房脚本
├── wclick.conf                 # Web 服务相关配置
└── 大海世界.pptx               # 展示用课件

顶层

  • AGENTS.md / CLAUDE.md
    • 长期协作规则,两份文件正文保持一致。
  • README.md
    • 当前有效的项目入口文档。
  • Makefile
    • 本地开发、测试、构建、hook 安装入口。
  • Dockerfile
    • 发布镜像入口,当前基于 cgr.dev/chainguard/static:latest
  • .github/workflows/build.yml
    • 当前 GitHub Actions 构建与部署流程。
  • docs/
    • 一次性方案、实施记录、开发参考、阶段总结、归档。
  • scripts/
    • 本地运维与数据辅助脚本。
  • pixel-assets/
    • 像素资源与视觉素材。

后端 backend/

  • cmd/server/main.go
    • 服务启动入口。
  • cmd/printcfg/main.go
    • 配置打印工具。
  • cmd/backfillbosskills/main.go
    • Boss 击杀统计回填工具。
  • cmd/checkbosskills/main.go
    • Boss 击杀统计检查工具。
  • cmd/local_click_latency/main.go
    • 本地点击时延测试工具。
  • internal/httpapi/
    • HTTP 路由、WebSocket、静态资源与接口入口。
  • internal/events/
    • SSE 订阅中心与事件广播。
  • internal/core/
    • 主要玩法、状态与存储逻辑。
  • internal/config/
    • Consul 配置加载。
  • internal/mongostore/
    • MongoDB 冷数据与日志存储。
  • internal/oss/
    • OSS 上传与签名能力。
  • public/
    • 前端构建产物目录,由 Vite 输出并嵌入二进制。

前端 frontend/

  • src/main.js
    • 前端入口。
  • src/App.vue
    • 根组件。
  • src/pages/
    • 主要页面:战斗、资料页、任务、消息、商店、后台、天赋等。
  • src/components/admin/
    • 后台管理组件。
  • src/utils/
    • 实时传输、状态合并、格式化等工具。
  • src/proto/
    • 前端实时协议生成代码。

本地开发

环境要求

  • Go 1.26.2
  • Bun 1.3.13 或兼容版本
  • 可访问的 Redis、MongoDB、Consul

运行时配置由 Consul 提供,常见本地环境变量:

export CONSUL_ADDR=http://127.0.0.1:8500
export CONSUL_CONFIG_KEY=vote-wall/dev

配置字段参考:

  • backend/config.example.yaml
  • backend/cmd/printcfg/main.go

常用命令

make deps
make dev
make backend-run
make frontend-dev
make build
make test
make check
bun --cwd=frontend run test
make hooks-install

补充命令:

make backend-backfill-boss-kills
make backend-check-boss-kills
go -C backend run ./cmd/printcfg

命令约束

  • Go 命令必须在 backend/ 目录执行,或使用 go -C backend ...
  • 前端命令默认在仓库根目录通过 bun --cwd=frontend ... 执行。
  • make dev 会同时启动 Go 后端和 Vite 前端。
  • make build 只构建前端产物到 backend/public/
  • make test 只运行后端测试。
  • make check 是本地手动全量校验入口,包含:
    • 后端测试
    • go vet
    • 前端测试
    • 前端构建

提交前校验

仓库使用 lefthook 管理本地 pre-commit

安装:

make hooks-install

当前 pre-commit 会执行:

  • bun --cwd=frontend install
  • go -C backend mod tidy
  • go -C backend fix ./...
  • go -C backend test ./...
  • go -C backend vet ./...
  • bun --cwd=frontend run test

构建与部署

前端产物

Vite 当前输出目录是 frontend/vite.config.js 中的 ../backend/public,后端通过 backend/embed_public.go 将其嵌入编译产物,因此发布镜像只需要后端二进制即可承载静态资源。

后端发布二进制

当前发布命令:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
  go -C backend build -trimpath -buildvcs=false -ldflags "-w -s -buildid=" -o long ./cmd/server

GitHub Actions

当前 workflow 位于 .github/workflows/build.yml,在 main 分支 push 后执行:

  1. 安装前端依赖
  2. 运行后端测试与 vet
  3. 构建前端产物
  4. 构建 Linux amd64 后端二进制
  5. 通过 SSH 清理服务器上的旧容器和旧镜像
  6. 同步 Dockerfiledocker-compose.yml、后端二进制和前端静态产物到服务器
  7. 通过 SSH 到 x1sv 在服务器端执行 docker compose up -d --build

服务器部署约束

  • 发布镜像当前在服务器端基于仓库内 docker-compose.yml 触发构建。
  • 服务器端部署目录为 /home/docker-images/long/deploy-artifacts
  • workflow 当前在服务器端执行:
cd /home/docker-images/long/deploy-artifacts
docker network inspect docker-compose_app-net >/dev/null 2>&1 || \
  docker network create docker-compose_app-net
CONSUL_ADDR=... CONSUL_CONFIG_KEY=... docker compose up -d --build

测试特性

  • 后端测试使用 miniredis,不依赖真实 Redis。
  • 前端测试主要使用 vitest 做源码模式校验和工具逻辑校验,不依赖完整浏览器渲染环境。

文档入口

当前有效的一次性设计、方案与实施记录统一放在 docs/,总索引见 docs/README.md

推荐入口:

About

点就完事了

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages