Ho un server I / O non bloccante personalizzato che supporta (tra le altre cose) HTTP e websockets.
Ho due concetti di timeout per le connessioni:
- inattivo: le connessioni che non eseguono nulla vengono chiuse dopo (per impostazione predefinita) 5 minuti di inattività
- durata: le connessioni più vecchie di una certa età (1 ora per impostazione predefinita) vengono uccise quando diventano inattive (quindi senza il tempo di inattività richiesto)
Queste sono (secondo me) impostazioni generalmente buone quando si tratta di HTTP ma per i websocket è un po 'più difficile.
L'inattività può essere evitata inviando di volta in volta un heartbeat sul websocket, tuttavia il requisito di durata è in conflitto con l'ideologia dei websocket.
Ci sono un certo numero di opzioni:
- configurare esplicitamente una durata globale pari a 0 (infinito) o un numero elevato per il server se si prevede di utilizzare websockets, ma ciò avverrebbe per tutto sul server (anche il normale traffico HTTP)
- eliminare la durata predefinita e consentire semplicemente l'infinito di default
- esonerare i websocket (e altri protocolli di questo tipo) dai requisiti di durata e forse aggiungere una seconda vita per le connessioni di lunga durata
Quindi, in generale, la domanda è: come proteggi da connessioni di lunga durata mentre permetti comunque a protocolli come websockets di funzionare correttamente senza troppe interruzioni non necessarie?
L'impostazione "durata" è anche una buona idea?