125 lines
3.6 KiB
Markdown
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! 🚀
|