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

 
 
 

Contributors

Languages