Las peticiones al servidor Node.js el tiempo de espera debido a las múltiples solicitudes

Mike Meadows:

Así que no estoy muy experimentado con el nodo de modo oso conmigo.

Tengo 2 rutas en un servidor Node.js. Durante un día típico, ambas rutas serán golpeados con solicitudes al mismo tiempo. Ruta 1 se ejecutará sin problemas pero ruta 2 es una procesos de larga duración que devuelve varias promesas, por lo que la ruta 1 tomará el recurso causando ruta 2 para hacer una pausa (he determinado esto está ocurriendo a través de los registros de datos).

Ruta 1 es similar al siguiente:

  app.post('/route1', function (req, res) {
    doStuff().then(function(data){
      res.end();
    })
  }

Ruta 2 está manejando una matriz de datos que necesita ser analizados a través de por lo 1 registro en la matriz se procesa a la vez

app.post('/route2', function (req, res){
 async function processArray(array) {
      for (const item of array) { 
         await file.test1()(item, res);
           await file.test2()(item, res);
             //await test3,test4,test5,test6 
      }
  }
  processArray(data).then(function() {
    res.end();
  }
}

Así que supongo que el problema es que el asíncrono / Await está esperando recursos estén disponibles antes de continuar con los registros de proceso.
¿Hay alguna manera de escribir esto a donde Route1 no interferirán con route2?

max:

En Nodo, casi todo lo que pueda awaitpara (o llamar thensucesivamente) es asíncrono. Que no bloquee el subproceso de ejecución, sino que descarga la tarea a otra capa que no controlan, y luego simplemente espera para que pueda ser terminado mientras que ser libre para trabajar en otra cosa. Que incluye el trabajo con las solicitudes del sistema de archivos y de red. Hay maneras de bloquear el hilo todavía, por ejemplo, usando versiones síncronas de los métodos de sistema de archivos (como readFileSyncen lugar de readFile) o haciendo cálculos pesados sobre Javascript (como el cálculo factorial de 4569485960485096)

Teniendo en cuenta su Route1 no hace nada de esto, no se necesita ningún recurso del route2. Que se están ejecutando en paralelo. Es difícil de decir sin ver el código real, pero estoy bastante seguro de que está recibiendo tiempo de espera de conexión, ya que su route2 está mal escrito y se necesita mucho tiempo para resolver (o no resuelve en absoluto) por razones no relacionadas con el Nodo rendimiento o bloqueo. Nodo está simplemente pasando a la espera de su sistema de archivos para ejecutar esas interminables pruebas de 6 veces en cada elemento de la matriz (o lo que está pasando allí) y mientras esto sucede, el navegador deja de esperar la respuesta y la muestra de tiempo de espera de conexión. Lo más probable es que no es necesario que esperan para cada prueba en cada matriz en los datos en lugar de simplemente corriendo a todos en paralelo

Leer más aquí https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/ y aquí https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects / Promise / todos

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=282955&siteId=1
Recomendado
Clasificación