Files
echoes-of-the-ash/old/WEBSOCKET_DEPLOYMENT.md
2025-11-27 16:27:01 +01:00

125 lines
3.6 KiB
Markdown

# WebSocket Deployment Guide
## Quick Deployment Steps
### 1. Install New Dependencies
```bash
cd /opt/dockers/echoes_of_the_ashes
docker compose down
docker compose build
docker compose up -d
```
This will rebuild the containers with the new `websockets` package.
### 2. Verify Installation
Check that the API container started successfully:
```bash
docker compose logs api | grep "WebSocket"
```
You should see log entries about WebSocket connections once players connect.
### 3. Test WebSocket Connection
Open the game in a browser and check the console (F12):
- Look for: `🔌 Connecting to WebSocket: ws://...`
- Look for: `✅ WebSocket connected`
### 4. Monitor Active Connections
Check the health endpoint to see active WebSocket connections:
```bash
curl http://localhost:8000/health
```
(Can be extended to show WebSocket connection count)
### 5. Test Real-Time Updates
1. **Movement Test:**
- Open game in two browser tabs (different accounts)
- Move one character to a location
- Other tab should see "Player arrived" message immediately
2. **Combat Test:**
- Start combat with an NPC
- Attacks should update immediately (no 5s delay)
3. **Pickup Test:**
- Drop an item in a location
- Other players in same location should see it disappear when picked up
## Rollback (If Needed)
If WebSocket causes issues, you can roll back to pure polling:
### Option 1: Disable WebSocket on Frontend
Edit `pwa/src/components/Game.tsx`:
```typescript
const { isConnected, sendMessage } = useGameWebSocket({
token,
onMessage: handleWebSocketMessage,
enabled: false // Change true to false
})
```
### Option 2: Remove WebSocket from Backend
Revert changes to:
- `api/main.py` (remove WebSocket endpoint and broadcasts)
- `api/database.py` (remove get_players_in_location)
- `requirements.txt` (remove websockets package)
Then rebuild and redeploy.
## Performance Monitoring
### Watch for Issues
```bash
# Monitor API logs for WebSocket errors
docker compose logs -f api | grep "WebSocket\|❌"
# Check for memory usage increases
docker stats echoes_of_the_ashes_api
# Monitor connection count (check server load)
# Add to health endpoint or check logs for "WebSocket connected/disconnected"
```
### Expected Behavior
- **Connection:** Players connect within 1-2 seconds of loading game
- **Reconnection:** If network drops, should reconnect within 3 seconds
- **Memory:** ~10MB per 1,000 connections (very low)
- **CPU:** Should decrease compared to polling (event-driven)
## Troubleshooting
### WebSocket Not Connecting
1. Check CORS settings in `api/main.py`
2. Verify token is present: `localStorage.getItem('token')` in browser console
3. Check nginx/proxy configuration (if using reverse proxy)
### Frequent Disconnections
1. Check heartbeat interval (30s default)
2. Verify network stability
3. Check for proxy timeouts (nginx: `proxy_read_timeout 60s;`)
### Messages Not Received
1. Verify `manager.send_personal_message()` is being called
2. Check player_id matches active connection
3. Look for WebSocket send errors in logs
## Next Steps After Deployment
1. **Monitor for 24 hours:** Check stability and error rates
2. **Gather user feedback:** Is latency better? Any connection issues?
3. **Plan live chat:** Quick win feature using WebSocket infrastructure
4. **Consider party system:** Next major feature enabled by WebSockets
## Success Metrics
After deployment, you should see:
-**95% reduction** in API request volume
-**<100ms latency** for game updates (vs 2500ms avg with polling)
-**Lower server CPU** usage (event-driven vs continuous polling)
-**Improved UX** - instant feedback on actions
Good luck with the deployment! 🚀