Node 18 will close proxied websocket connections after ~60 seconds

Abierto
#1,664 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
javascript, node.js

Línea de trabajo

Comienza con la configuración del servidor proxy y el servidor devuelto por app.listen, y luego compara el comportamiento de headersTimeout y requestTimeout de Node 18 con la solución alternativa enlazada. Reproduce una conexión WebSocket a través de un proxy que dure más de 60 segundos y verifica que ya no reciba HTTP 408 Request Timeout; el issue no menciona ningún archivo del repositorio ni ninguna prueba para comenzar.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

With Nodejs 18 another set of http timeouts have been introduced:

  • headersTimeout
  • requestTimeout

see: https://nodejs.org/en/blog/release/v18.0.0/#http-timeouts

These timeouts cause that established websocket connections are closed after roughly 60 seconds.
if you inspect the websocket connection via Wireshark, you see that nodejs just sends:

HTTP/1.1 408 Request Timeout
Connection: close

Through the websocket connection after the timeout.

The simplest workaround to prevent this, is to set both timeouts to zero:

const app = express();
[...]
const server = app.listen(process.env.SERVER_PORT);

// disable timeouts as otherwise websocket connections are closed after ~60-90 seconds
server.headersTimeout = 0;
server.requestTimeout = 0;

Other libs actually implemented some handling for these cases: e.g. https://github.com/vercel/next.js/commit/486b36237a213ebf4c19a3bd8f296fad5b400a64

It would be nice if this could be somehow addressed as part of this lib.

Lenguaje dominante
JavaScript
Estrellas
14.1k
Forks
2k
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de http-party/node-http-proxy

Todos los issues de http-party/node-http-proxy

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.