Skip to content

SPACEX-2022/fish-server

Repository files navigation

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Discord Backers on Open Collective Sponsors on Open Collective Donate us Support us Follow us on Twitter

捕鱼游戏服务器

基于NestJS开发的多人捕鱼游戏服务器,游戏主要玩法模仿游戏厅街机-捕鱼达人,服务端主要负责微信登录以及多人模式的功能。

技术栈

  • 框架: NestJS
  • 数据库: MongoDB (使用Mongoose ODM)
  • 缓存: Redis
  • 认证: JWT + Passport
  • 实时通信: 原生WebSocket
  • API文档: Swagger

主要功能

  • 用户授权: 微信小游戏登录授权
  • 多人游戏房间: 创建/加入/退出游戏房间
  • 实时通信: 使用WebSocket进行游戏状态同步
  • 排行榜系统: 基于Redis实现的高效排行榜
  • 心跳检测: 基于WebSocket的用户在线状态追踪
  • 数据持久化: 用户数据、游戏记录保存至MongoDB

项目设置

$ pnpm install

编译和运行项目

# 开发模式
$ pnpm run start

# 监视模式
$ pnpm run start:dev

# 生产模式
$ pnpm run start:prod

WebSocket连接说明

服务器使用原生WebSocket协议进行实时通信,主要端点:

心跳检测

  • URL: ws://服务器地址:端口/api/heartbeat
  • 认证: 通过URL参数传递JWT令牌 ?token=your_jwt_token
  • 事件:
    • connection: 连接建立时服务器发送的事件
    • heartbeat: 客户端定期发送以维持连接
    • status: 客户端请求获取状态信息

示例代码:

// 连接WebSocket
const token = 'your_jwt_token';
const ws = new WebSocket(`ws://localhost:3000/api/heartbeat?token=${token}`);

// 连接建立
ws.onopen = () => {
  console.log('连接已建立');
  
  // 定时发送心跳
  setInterval(() => {
    ws.send(JSON.stringify({ event: 'heartbeat', data: {} }));
  }, 30000);
};

// 接收消息
ws.onmessage = (event) => {
  const message = JSON.parse(event.data);
  console.log('收到消息:', message);
};

游戏房间

  • URL: ws://服务器地址:端口/api/game-room
  • 认证: 同样通过JWT令牌进行认证
  • 主要事件: 请参考API文档

运行测试

# 单元测试
$ pnpm run test

# e2e测试
$ pnpm run test:e2e

# 测试覆盖率
$ pnpm run test:cov

配置说明

项目使用环境变量进行配置,主要配置项:

# 应用配置
PORT=3000
API_PREFIX=/api
NODE_ENV=development

# 数据库配置
MONGODB_URI=mongodb://localhost:27017/fish-game

# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379

# JWT配置
JWT_SECRET=your_secret_key
JWT_EXPIRES_IN=7d

# 微信配置
WX_APP_ID=your_wx_app_id
WX_APP_SECRET=your_wx_app_secret

使用PM2部署服务并配置SSL

准备工作

  1. 确保安装了PM2:
npm install -g pm2
#
pnpm add -g pm2
  1. 安装依赖:
pnpm install

SSL证书配置

  1. 创建存放SSL证书的目录:
mkdir -p ssl
  1. 配置SSL证书:

    • 如果您有正式的SSL证书,请将证书文件和密钥文件分别命名为cert.pemkey.pem,并放置在ssl目录下
    • 如果仅用于测试,可以生成自签名证书:
    openssl req -x509 -newkey rsa:4096 -keyout ssl/key.pem -out ssl/cert.pem -days 365 -nodes
  2. 配置.env文件启用SSL:

HTTPS_ENABLED=true
SSL_CERT_PATH=./ssl/cert.pem
SSL_KEY_PATH=./ssl/key.pem

部署服务

Linux/macOS

使用提供的部署脚本:

chmod +x scripts/deploy.sh
./scripts/deploy.sh

Windows

使用提供的批处理脚本:

scripts\deploy.bat

PM2常用命令

  • 查看应用状态:
pm2 status
  • 查看日志:
pm2 logs fish-game-server
  • 重启应用:
pm2 restart fish-game-server
  • 停止应用:
pm2 stop fish-game-server
  • 设置开机自启:
pm2 startup
pm2 save

协议

本项目基于 MIT 许可证

Stay in touch

License

Nest is MIT licensed.

About

捕鱼达人微信小游戏服务端

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages