In meiner Mochiweb-Anwendung verwende ich eine lange gehaltene HTTP-Anfrage. Ich wollte erkennen, wenn die Verbindung mit dem Benutzer gestorben, und ich herausgefunden, wie das zu tun, indem Sie:Erkennen von HTTP mit inet schließen
Socket = Req:get(socket),
inet:setopts(Socket, [{active, once}]),
receive
{tcp_closed, Socket} ->
% handle clean up
Data ->
% do something
end.
Dies funktioniert, wenn: Benutzer seine Reiter/Browser schließt oder aktualisiert die Seite. Wenn jedoch die Internetverbindung plötzlich abbricht (zB wenn das WLAN-Signal plötzlich verloren geht) oder wenn der Browser abnormal abstürzt, kann ich keinen TCP-Abschluss erkennen.
Fehle ich etwas oder gibt es einen anderen Weg, dies zu erreichen?
Ich dachte über die Verwendung der After-Klausel, aber in diesem Fall könnte mein Prozess einen Winterschlaf-Prozess sein. Würde die after-Klausel noch für einen Winterschlaf funktionieren? – jeffreyveon
Nein, würde es nicht. Ein Ruhezustand wird aktiviert, wenn eine Nachricht an ihn gesendet wird. Es gibt kein Zeitlimit für den Ruhezustand, daher sollten Sie eine verzögerte Nachricht erhalten, damit Sie aufwachen können. – Christian