mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-01-21 13:18:27 -05:00
79 lines
2.1 KiB
Markdown
79 lines
2.1 KiB
Markdown
# SSE (Server-Sent Events)
|
|
|
|
Real-time app state updates via Server-Sent Events. Reduces server load ~95% vs polling.
|
|
|
|
## Endpoints
|
|
|
|
| Endpoint | Method | Purpose |
|
|
|----------|--------|---------|
|
|
| `/sse/state` | GET | Stream state updates (requires Bearer token) |
|
|
| `/sse/stats` | GET | Debug: connected clients, queued events |
|
|
|
|
## Usage
|
|
|
|
### Connect to SSE Stream
|
|
```bash
|
|
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
|
|
http://localhost:5000/sse/state
|
|
```
|
|
|
|
### Check Connection Stats
|
|
```bash
|
|
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
|
|
http://localhost:5000/sse/stats
|
|
```
|
|
|
|
## Event Types
|
|
|
|
- `state_update` - App state changed (e.g., "Scanning", "Processing")
|
|
- `unread_notifications_count_update` - Number of unread notifications changed (count: int)
|
|
|
|
## Backend Integration
|
|
|
|
Broadcasts automatically triggered in `app_state.py` via `broadcast_state_update()`:
|
|
|
|
```python
|
|
from api_server.sse_broadcast import broadcast_state_update
|
|
|
|
# Called on every state change - no additional code needed
|
|
broadcast_state_update(current_state="Scanning", settings_imported=time.time())
|
|
```
|
|
|
|
## Frontend Integration
|
|
|
|
Auto-enabled via `sse_manager.js`:
|
|
|
|
```javascript
|
|
// In browser console:
|
|
netAlertXStateManager.getStats().then(stats => {
|
|
console.log("Connected clients:", stats.connected_clients);
|
|
});
|
|
```
|
|
|
|
## Fallback Behavior
|
|
|
|
- If SSE fails after 3 attempts, automatically switches to polling
|
|
- Polling starts at 1s, backs off to 30s max
|
|
- No user-visible difference in functionality
|
|
|
|
## Files
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `server/api_server/sse_endpoint.py` | SSE endpoints & event queue |
|
|
| `server/api_server/sse_broadcast.py` | Broadcast helper functions |
|
|
| `front/js/sse_manager.js` | Client-side SSE connection manager |
|
|
|
|
## Troubleshooting
|
|
|
|
| Issue | Solution |
|
|
|-------|----------|
|
|
| Connection refused | Check backend running, API token correct |
|
|
| No events received | Verify `broadcast_state_update()` is called on state changes |
|
|
| High memory | Events not processed fast enough, check client logs |
|
|
| Using polling instead of SSE | Normal fallback - check browser console for errors |
|
|
|
|
---
|
|
|
|
|