2012-04-01 20 views
5

Mam aplikację jednowątkową Rails uruchomioną na cienkim w trybie jednowątkowym na Heroku Cedar.W jaki sposób moja aplikacja jednowątkowa Rails obsługuje żądania równoczesne?

Podczas gdy wykonuję duże zlecenie POST (przesyłanie pliku), które trwa dłużej niż minutę, mogę wykonywać inne żądania GET w tym samym czasie.

Wsparcie Heroku zapewnia, że ​​ich warstwa routingu nie zapisuje żądania, a następnie wysyła je wszystkie naraz (co jest zachowaniem wielu serwerów proxy, takich jak nginx). Upierają się, że moja aplikacja obsługuje równoczesne żądania.

Co tu się dzieje?

Odpowiedz

6

Thin jest zbudowany na serwerze EventMachine, który zapewnia obsługę zdarzeń w oparciu o zdarzenia.

Oznacza to, że Thin asynchronizuje odbiór twojego żądania POST, jednocześnie obsługując żądania GET. Po przesłaniu danych POST, Thin następnie przekazuje je do Rails (gdzie jest przetwarzane synchronicznie i blokuje inne żądania aż do zakończenia).

+0

interesujące - jeśli to prawda, jestem zaskoczony, że zachowanie cienkich nie mówi o więcej. to tak, jakby miał przed sobą swoje własne małe mini proxy, poprawiające współbieżność. czy znasz część cienkiego kodu, na który mogłem spojrzeć, aby zrozumieć to zachowanie? –

+0

Nie zaglądałem do kodu cienkiego, ale logicznie, powinna to być warstwa sieciowa. Nie wiem, czy łatwo jest to zidentyfikować w źródłach. –

+0

Wygląda na twórcę cienkich wyrazów: https://groups.google.com/forum/#!msg/thin-ruby/uKLD-qob6Kc/gH8b4MPATI8J –

Powiązane problemy