Длинный опрос в Mochiweb - Как определить, прерывает ли клиент запрос? - PullRequest
4 голосов
/ 23 июня 2010

У меня есть базовый цикл опроса mochiweb, который выглядит следующим образом, за исключением того, что он выполняет другие операции вместо печати на консоль и в конечном итоге возвращает:

blah() -> 
  io:format("Blah")
  blah()

loop(Req) ->
  PathParts = string:tokens(Req:get(path), "/")
  case PathParts of
    ["poll"] -> 
      blah()

Это прекрасно работает, пока клиент не прервет свой запрос. Например, если окно клиента закрыто, этот процесс продолжает работать бесконечно.

Я хотел бы знать, есть ли в запуске mochiweb опция () или, может быть, что-то еще, что я пропускаю, что mochiweb автоматически завершает этот процесс или, по крайней мере, отправляет сообщение об отказе клиента. Есть идеи?

1 Ответ

0 голосов
/ 23 июня 2010

Похоже, одно решение настраивает другой процесс для повторного вызова gen_tcp:recv(Req:get(socket), 0, 1) и ищет результат {error, closed}, а затем прерывает процесс опроса, если он получен ... Не уверен, что это оптимально хотя.

...