memory leak on client side with websocket sessions
Los mantenedores suelen responder en 5 días
Nadie ha tomado este issue todavía.
- #154 de @VastBlast — cerrado sin fusionar
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- typescript
- Área
- networking
Línea de trabajo
Empieza ejecutando la reproducción proporcionada del servidor y cliente TypeScript, y después inspecciona el ciclo de vida de newWebSocketRpcSession y sus promises retenidas con --inspect. Se considera terminado cuando las llamadas websocket repetidas ya no retienen promises no utilizadas y la memoria del cliente se estabiliza sin reiniciar la sesión.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
There seems to be a memory leak on the client side with websocket sessions, unless I am doing something wrong. I understand there are disposal rules to consider, especially with websockets per the docs, but I tried many different things and the only way to clear the memory of unused promises seems to be to restart the session. See the reproduction below.
I also ran it with --inspect and it seems there are forever-growing Promise's kept in the memory.
Server:
import { RpcTarget, newWebSocketRpcSession } from "capnweb";
import { WebSocketServer } from "ws";
class Api extends RpcTarget {
sendMeText(text: string): string {
return `got: ${text}`;
}
}
const server = new WebSocketServer({ port: 8787, perMessageDeflate: false });
server.on("connection", ws => {
newWebSocketRpcSession(ws as any, new Api());
});
console.log("ws://localhost:8787");
Client:
import { newWebSocketRpcSession } from "capnweb";
type Api = {
sendMeText(text: string): string;
};
const session = newWebSocketRpcSession<Api>("ws://localhost:8787");
const text = "abc123".repeat(2000);
let calls = 0;
setInterval(() => {
console.log(
`calls=${calls} heapUsed=${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(1)}MB`
);
}, 1000);
while (true) {
await session.sendMeText(text);
++calls;
await new Promise(resolve => setTimeout(resolve, 1)); // delay 1ms
}
// this doesn't prevent a memory leak either, same result:
while(true){
const res = session.sendMeText(text);
await res;
res[Symbol.dispose]();
++calls;
await new Promise(resolve => setTimeout(resolve, 1)); // delay 1ms
}
- Lenguaje dominante
- TypeScript
- Estrellas
- 4k
- Forks
- 150
- Merge medio
- 3 d 12 h
- PR fusionados (30 d)
- 2
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cloudflare/capnweb
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
cloudflare/capnweb#269 · 2 comentarios ·
Los mantenedores suelen responder en 5 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
cloudflare/capnweb#260 ·
Los mantenedores suelen responder en 5 días
-
onRpcBroken should return a Disposable so registrations can be undoneQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertoenhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
cloudflare/capnweb#234 · 1 comentario ·
Los mantenedores suelen responder en 5 días
-
support `Map` serialization typePosiblemente ocupada @srikrsna la tomó hace 88 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
cloudflare/capnweb#230 ·
Los mantenedores suelen responder en 5 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
cloudflare/capnweb#228 ·
Los mantenedores suelen responder en 5 días
Todos los issues de cloudflare/capnweb
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
unocss/unocss#5421 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
needs-area
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Azure/typespec-azure#5936 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 Medio día Aptitud para principiantes 72/100
vercel-labs/scriptc#2910 ·
Los mantenedores suelen responder en 1 día
-
automation missing-model model-sync provider:fireworks-ai
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/models.dev#12458 ·
Los mantenedores suelen responder en 1 día