TsgcWebSocketServer_HTTPAPI | OnDisconnect non attivato

Quando si lavora per la prima volta con il Server HTTPAPI, è molto comune notare che l'evento OnDisconnect non viene attivato immediatamente quando un client chiude la connessione. Il motivo è che il Server HTTPAPI funziona in modo leggermente diverso rispetto ad altri server come Indy. Nel server Indy è presente un thread per ogni connessione e questo thread controlla ogni x millisecondi se la connessione è attiva. Il Server HTTPAPI utilizza un thread pool che gestisce tutte le connessioni e non controlla per ogni connessione se è attiva o meno.

 

Per ricevere una notifica quando il client chiude la connessione, eseguire la seguente configurazione:

 

1. Se utilizza un TsgcWebSocketClient, imposti Options.CleanDisconnect := True. Ciò significa che prima della chiusura della connessione, il client tenterà di inviare una notifica al server indicando che la connessione verrà chiusa. Se il server riceve questo messaggio, verrà chiamato l'evento OnDisconnect.

 

2. Per le altre disconnessioni, l'unica soluzione è scrivere qualcosa sul socket; se l'operazione fallisce, la connessione è disconnessa. Abiliti HeartBeat sul server HTTPAPI, e imposti ad esempio un intervallo di 60 secondi e un timeout di 0. Questa configurazione significa che ogni 60 secondi tutte le connessioni verranno pingate, e se qualcuna è disconnessa, verrà attivato l'evento OnDisconnect. Può impostare un valore di HeartBeat.Interval più basso, ma non lo imposti troppo basso (1 secondo ad esempio è troppo basso) perché le prestazioni del server ne risentirebbero.