Длинные опросы в Mochiweb - Как определить, если клиент прерван будет запросом?
Вопрос
У меня есть базовый цикл опроса MOCHIWEB, который выглядит следующим образом, за исключением того, что он делает другие вещи вместо печати к консоли и в конечном итоге возвращается:
blah() ->
io:format("Blah")
blah()
loop(Req) ->
PathParts = string:tokens(Req:get(path), "/")
case PathParts of
["poll"] ->
blah()
Это прекрасно работает, пока клиент не прернет их запрос. Например, если окно клиента закрыто, этот процесс продолжает работать на неопределенный срок.
Я хотел бы знать, есть ли вариант в Start () Mochiweb () или, может быть, что -то еще, которое я упускаю из виду, что MochiWeb автоматически прекратило этот процесс или, по крайней мере, отправил сообщение на прерванное клиентом. Любые идеи?
Решение
Выглядит как один Решение - это настройка еще одного процесса для повторного вызова gen_tcp:recv(Req:get(socket), 0, 1)
и ищу результат {error, closed}
, затем убийство процесса опроса, если он получен ... не уверен, что это оптимально.