In che modo i metodi di azione asincrona mantengono la loro connessione di rete?

4

In ASP.Net MVC, il modo classico (sincrono) per scrivere un metodo di azione è restituire ActionResult . Più recentemente, è stata aggiunta la possibilità di eseguire metodi di azione in modo asincrono, consentendo ai metodi di azione di restituire Task<ActionResult> .

Ho letto link che spiega che i metodi di azione asincroni consentono al thread del web server di essere restituito al pool di thread mentre il metodo action è ancora in esecuzione e allocato dal pool quando il metodo è pronto per restituire il risultato.

Tuttavia, non capisco come funzioni dal punto di vista della rete. Il browser Web ha ancora una connessione aperta al server web, quindi cosa succede al lato server della connessione mentre il thread che lo ha gestito viene restituito al pool di thread?

    
posta JoelFan 15.04.2016 - 20:59
fonte

1 risposta

6

Una "connessione" non è molto più di un record in una tabella.

Finché entrambe le parti hanno un "piano" per instradare i pacchetti l'uno dall'altro, la connessione è "aperta". Non richiede che una delle due estremità abbia un thread dedicato "tenendo aperta la connessione". Richiede solo che la parte finale abbia informazioni sufficienti per instradare ed elaborare i pacchetti ricevuti dall'altra parte.

Detto questo, di solito c'è molta complessità nel gestire le connessioni, proteggerle e smaltirle con garbo. I protocolli possono includere messaggi di chiusura / disconnessione per la Parte A per informare Party B che "Non ti ascolto più". Oppure, al contrario, un protocollo potrebbe chiedere che la Parte A di occasionale dica "Sono ancora qui" se vuole che la Parte B continui ad ascoltare.

Ma anche quelle cose non richiedono un thread dedicato o per-connessione . Una connessione "aperta" richiede solo che qualcosa su entrambe le estremità di una connessione sia in grado di gestire i pacchetti l'uno dall'altro.

Se si desidera ottenere un risultato estremo, è possibile creare un intero sistema che si avvita e avvia una nuova discussione per ogni pacchetto. È possibile mantenere l'elenco delle "connessioni aperte" in un file di testo. Cavolo, se stai progettando l'hardware, potresti persino spegnere la CPU principale e far risvegliare la scheda di rete, eseguire un avvio completo e quindi consegnare il pacchetto alla routine specificata dal tuo tabella "connessioni aperte". E, probabilmente sarebbe molto molto molto lento; ma quelle molto molto connessioni lente sono ancora connessioni "aperte".

    
risposta data 15.04.2016 - 22:08
fonte

Leggi altre domande sui tag