2013-07-11 7 views
5

Podczas korzystania z Nginx są chwile, w których protokół HTTP 499 jest rejestrowany w dzienniku błędów, gdy klient przedwcześnie zakończył połączenie (na przykład, upłynął czas połączenia, użytkownik ponownie załadował przeglądarkę lub naciśnie klawisz Stop lub Inaczej).Wykrywanie zamknięcia połączenia HTTP w Railsach

Rozumiem, że Nginx jest w stanie to wykryć, ponieważ jest to koniec, który otrzyma sygnał SIGPIPE wskazujący, że gniazdo zostało zamknięte, jednak zastanawiam się, czy w ogóle można zwrócić tę uwagę do Railsów?

Shopify ostatnio użył very novel approach do wykrycia tego w Unicorn przed wysłaniem żądania do Railsów do przetworzenia, jednak chciałbym móc to wykryć w aplikacji Rails, na przykład podczas długotrwałej transakcji.

+0

Z powodu mojej wiedzy (która może być nie tak), nie ma na to rozwiązania. (dlatego Shopify próbuje go wykryć PRZED wysłaniem żądania do Railsów). Problem nie polega nawet na zatrzymywaniu Railsów, ale nie ma sposobu, aby zatrzymać transakcję db w środku i myślę, że to główny problem twojego pytania. –

Odpowiedz

1

Po tym, jak dyspozytor Railsa już rozpoczął przetwarzanie żądania - nie ma już połączenia z klientem http, tylko po zakończeniu przetwarzania - odpowiedź jest kierowana z powrotem do klienta.

W zasadzie nie można stwierdzić, czy klient (np. Przeglądarka) zamknął połączenie podczas przetwarzania.