A progressive Node.js framework for building efficient and scalable server-side applications.
基于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协议进行实时通信,主要端点:
- 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:
npm install -g pm2
# 或
pnpm add -g pm2
- 安装依赖:
pnpm install
- 创建存放SSL证书的目录:
mkdir -p ssl
-
配置SSL证书:
- 如果您有正式的SSL证书,请将证书文件和密钥文件分别命名为
cert.pem
和key.pem
,并放置在ssl
目录下 - 如果仅用于测试,可以生成自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout ssl/key.pem -out ssl/cert.pem -days 365 -nodes
- 如果您有正式的SSL证书,请将证书文件和密钥文件分别命名为
-
配置.env文件启用SSL:
HTTPS_ENABLED=true
SSL_CERT_PATH=./ssl/cert.pem
SSL_KEY_PATH=./ssl/key.pem
使用提供的部署脚本:
chmod +x scripts/deploy.sh
./scripts/deploy.sh
使用提供的批处理脚本:
scripts\deploy.bat
- 查看应用状态:
pm2 status
- 查看日志:
pm2 logs fish-game-server
- 重启应用:
pm2 restart fish-game-server
- 停止应用:
pm2 stop fish-game-server
- 设置开机自启:
pm2 startup
pm2 save
本项目基于 MIT 许可证
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
Nest is MIT licensed.