Upgrade listener stays on a custom server after close when `preClose` is set
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, node.js
- Ambito
- backend, networking
Direzione di ricerca
Inizia leggendo la configurazione dei listener del plugin e l’implementazione di defaultPreClose, che l’issue identifica come il punto in cui avviene attualmente la rimozione dei listener. Riproduci il caso con un preClose personalizzato e un server fornito, poi verifica che fastify.close() lasci a 0 il numero di listener upgrade con entrambi gli hook di chiusura.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Prerequisites
- I have written a descriptive issue title
- I have searched existing issues to ensure the bug has not already been reported
Fastify version
5.x
Plugin version
11.3.6
Node.js version
22.x
Operating system
Linux
Description
When you pass both options.server and a custom preClose, fastify.close() leaves the plugin's upgrade listener on the supplied server. Upgrade requests that arrive at that server after close are routed through the closed Fastify instance and get a 503 response.
#379 fixed this for the default preClose, but the listener removal lives inside defaultPreClose. A custom preClose can't remove the listener because the listener function is internal to the plugin.
Steps to reproduce
const http = require('node:http')
const Fastify = require('fastify')
const WebSocket = require('ws')
const ext = http.createServer()
ext.listen(0, async () => {
const app = Fastify()
await app.register(require('@fastify/websocket'), {
options: { server: ext },
preClose: (done) => app.websocketServer.close(done)
})
app.get('/', { websocket: true }, (socket) => socket.close())
await app.ready()
await app.close()
console.log(ext.listenerCount('upgrade')) // 1
const ws = new WebSocket('ws://localhost:' + ext.address().port)
ws.on('unexpected-response', (_, res) => console.log(res.statusCode)) // 503
})
Expected behavior
fastify.close() removes the plugin's upgrade listener from the supplied server whichever preClose you use, so listenerCount('upgrade') is 0 after close.
- Lingua principale
- JavaScript
- Stelle
- 467
- Fork
- 88
- Merge medio
- 7h 10m
- PR unite (30g)
- 3
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di fastify/fastify-websocket
-
Support RFC 8441Forse già presa @mcollina l’ha presa 293 giorni fa. Apertafeature request
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
fastify/fastify-websocket#353 · 1 commento ·
-
Enhance code re-usabilityForse già presa @hoanle0126 l’ha presa 4 giorni fa. Apertafeature request
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
fastify/fastify-websocket#208 · 5 commenti ·
-
Setting custom headers on initial WebSocket HTTP Upgrade responseForse già presa @hoanle0126 l’ha presa 4 giorni fa. Apertafeature request
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
fastify/fastify-websocket#204 · 2 commenti ·
-
Message ValidationsForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertafeature request
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
fastify/fastify-websocket#190 · 7 commenti · 1 reazione ·
Tutte le issue di fastify/fastify-websocket
Issue simili
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 87/100
OWASP/CheatSheetSeries#2905 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ComposioHQ/composio#5249 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
zilliztech/memsearch#838 ·
I maintainer di solito rispondono entro 1 giorno
-
[DOCS] Nine one-colon directives hide code examples and notes in the reference docs (e.g. CustomJS)ApertaTRIAGE
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
cdx-audit output written to a pipe is cut off at 64 KiBForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertabug mode:cli
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno