2012-04-01 6 views
5

Ho un'applicazione Rails a thread singolo in esecuzione su thin in modalità single-threaded su Heroku Cedar.In che modo la mia app Rails a thread singolo gestisce le richieste simultanee?

Mentre eseguo un'enorme richiesta POST (un caricamento di file) che richiede più di un minuto, posso fare altre richieste GET allo stesso tempo.

Il supporto di Heroku mi assicura che il loro livello di routing non sta memorizzando la richiesta e quindi inviando tutto in una volta (che è il comportamento di molti proxy, come nginx). Insistono che la mia app sta gestendo richieste concorrenti.

Cosa sta succedendo qui?

risposta

6

Thin si basa su EventMachine, che fornisce un IO basato sugli eventi.

Ciò significa che Thin esegue la ricezione asincrona della richiesta POST, mentre nel frattempo serve richieste GET. Quando i dati POST vengono caricati, Thin continua quindi a passarlo a Rails (dove viene elaborato in modo sincrono e blocca altre richieste fino al termine).

+0

interessante - se è vero, sono sorpreso che questo comportamento di sottile non è parlato di più. è come se avesse davanti il ​​suo piccolo mini proxy, migliorando la concorrenza. sai quale parte del codice sottile potrei guardare per capire questo comportamento? –

+0

Non ho esaminato il codice di thin, ma, logicamente, dovrebbe essere a livello di rete. Non so se sia facile identificarlo nelle fonti. –

+0

Sembra che il creatore di thin concurs: https://groups.google.com/forum/#!msg/thin-ruby/uKLD-qob6Kc/gH8b4MPATI8J –

Problemi correlati