服务端优化: - Socket.IO 配置优化,支持高并发 WebSocket 连接 - 添加 connectTimeout、perMessageDeflate 等参数 压测脚本: - 新增 vote-real-scenario.yaml 真实场景压测配置 - 支持 100人瞬间爆发、每人7票、不同投票速度模拟 - 添加随机延迟函数模拟真实用户行为 - 强制 WebSocket 传输避免 HTTP 连接限制 前端修复: - 修复 PostcardItem、PostcardDisplay 奖项名称硬编码问题 - 组件现在从后端 awards 配置动态获取奖项名称 - 修复 LiveVotingView、AdminControl 传递 awards 数据 - 新增 gala 压测命令到 package.json 测试验证: - 100人并发压测通过,成功率 100% - P95 延迟 0.7ms,远低于 500ms 阈值 - 系统可稳定支持 3.3 倍现场负载
59 lines
2.0 KiB
JSON
59 lines
2.0 KiB
JSON
{
|
|
"name": "@gala/server",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsup src/index.ts --format esm --target node20 --clean",
|
|
"start": "node dist/index.js",
|
|
"typecheck": "tsc --noEmit",
|
|
"db:generate": "prisma generate",
|
|
"db:migrate": "prisma migrate dev",
|
|
"db:push": "prisma db push",
|
|
"db:seed": "tsx src/scripts/seed.ts",
|
|
"test": "vitest",
|
|
"test:load": "artillery run load-test/vote-load-test.yaml -e standard",
|
|
"test:load:smoke": "artillery run load-test/vote-load-test.yaml -e smoke",
|
|
"test:load:peak": "artillery run load-test/vote-load-test.yaml -e peak",
|
|
"test:load:stress": "artillery run load-test/vote-load-test.yaml -e stress",
|
|
"test:load:gala": "artillery run load-test/vote-load-test.yaml -e gala",
|
|
"test:load:live": "artillery run load-test/vote-real-scenario.yaml -e live",
|
|
"test:load:report": "artillery run load-test/vote-load-test.yaml -e standard --output load-test/report.json && artillery report load-test/report.json"
|
|
},
|
|
"dependencies": {
|
|
"@gala/shared": "workspace:*",
|
|
"@prisma/client": "^6.2.1",
|
|
"@socket.io/redis-adapter": "^8.3.0",
|
|
"compression": "^1.7.5",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.4.7",
|
|
"express": "^4.21.2",
|
|
"helmet": "^8.0.0",
|
|
"ioredis": "^5.4.2",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"multer": "^2.0.2",
|
|
"nanoid": "^5.0.9",
|
|
"pino": "^9.6.0",
|
|
"pino-pretty": "^13.0.0",
|
|
"socket.io": "^4.8.1",
|
|
"uuid": "^13.0.0",
|
|
"xlsx": "^0.18.5",
|
|
"zod": "^3.24.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/compression": "^1.7.5",
|
|
"@types/cors": "^2.8.17",
|
|
"@types/express": "^5.0.0",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/multer": "^2.0.0",
|
|
"@types/uuid": "^11.0.0",
|
|
"artillery": "^2.0.28",
|
|
"prisma": "^6.2.1",
|
|
"socket.io-client": "^4.8.1",
|
|
"tsup": "^8.3.5",
|
|
"tsx": "^4.19.2",
|
|
"typescript": "^5.7.3",
|
|
"vitest": "^2.1.8"
|
|
}
|
|
} |