¿Usar una operación de sincronización larga de locking pausará a todos los usuarios en Node.js?

Si tengo un servidor SMTP (como haraka ) o un servidor web (como Express ) que usa Node.js y tengo que usar una función de sincronización que no se podría convertir a Async, ¿qué pasaría?

¿Si tengo que realizar una solicitud HTTP de forma sincrónica, el servidor se bloqueará a todos los usuarios hasta que la solicitud http finalice o se cuelgue solo para el usuario / correo electrónico actual? ¿Se pausará el procesamiento de todos los usuarios?

Para comprender la respuesta a su pregunta, realmente necesita entender el bucle de eventos node.js. Recomiendo encarecidamente visitar ese enlace SO y seguir algunos de los enlaces allí.

Si debe realizar una operación sincrónica, tenga en cuenta que , una llamada sincrónica bloqueará todas las demás solicitudes en ese proceso. Si desea que se sirva simultáneamente más de un cliente / remoto, entonces definitivamente querrá usar el módulo de clúster incorporado en node.js para generar procesos concurrentes.

Además, si su operación sincrónica es lo suficientemente lenta como para afectar su QoS, sería una idea muy inteligente familiarizarse con process.nextTick y evitar que sus procesos se detengan por completo mientras espera que se complete una operación de sincronización.

Por lo que sé, las solicitudes sincrónicas no bloquean a todos los usuarios, pero antes de hacer algo así, si no estoy absolutamente seguro, realizo algunas pruebas. Al usar futuros u otras bibliotecas, uno puede enviar solicitudes sincrónicas, lo cual es subóptimo, pero si el desarrollador no tiene los derechos / la posibilidad de trabajar con todo el código fuente, entonces podría ser un mal necesario.

Si esto se hace en el lado del cliente (no en este caso, pero aclaremos de todos modos), entonces una solicitud síncrona desde un navegador se ve así:

 funcion Foo(){ var request = new XMLHttpRequest(); request.open("GET", "http://server.com", false); request.send(); function handleResponse(response) { console.log(response); } handleResponse(request.responseText); }