2012-04-01 10 views
5

Ich habe eine Single-Threaded-Rails-Anwendung auf dünne im Single-Thread-Modus auf Heroku Cedar läuft.Wie behandelt meine Singlethread-Rails-App gleichzeitige Anfragen?

Während ich eine große POST-Anforderung (eine Datei-Upload) zu tun, die mehr als eine Minute dauert, kann ich zur gleichen Zeit andere GET-Anforderungen tun.

Heroku-Unterstützung versichert mir, dass ihre Routing-Schicht die Anfrage nicht speichert und dann alles auf einmal sendet (das ist das Verhalten vieler Proxies wie nginx). Sie bestehen darauf, dass meine App gleichzeitige Anfragen bearbeitet.

Was geht hier vor?

Antwort

6

Thin ist oben auf eventmachine gebaut, die ereignisbasierte IO zur Verfügung stellt.

Das bedeutet, dass Thin Asynchron-Empfangs Ihrer POST-Anforderung der Fall ist, während in der Zwischenzeit GET-Anfragen dienen. Wenn POST-Daten hochgeladen werden, leitet Thin es weiter an Rails (wo es synchron verarbeitet wird und andere Anforderungen blockiert, bis es beendet ist).

+0

interessant - wenn das stimmt, ich bin dieses Verhalten von dünnen überrascht nicht über mehr gesprochen. Es ist so, als ob es einen eigenen kleinen Mini-Proxy davor hätte, der die Nebenläufigkeit verbessert. Weißt du, welchen Teil des Thin-Codes ich betrachten könnte, um dieses Verhalten zu verstehen? –

+0

Ich habe nicht in Thins Code, aber logisch gesehen, sollte es Netzwerkebene sein. Ich weiß nicht, ob das in den Quellen leicht zu erkennen ist. –

+0

Sieht aus wie der Schöpfer von dünnem concurs: https://groups.google.com/forum/#!msg/thin-ruby/uKLD-qob6Kc/gH8b4MPATI8J –

Verwandte Themen