serverSideEmit(..., callback) does not deliver events until heartbeat is triggered
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 52/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- postgresql, typescript
- Domaine
- backend, databases, distributed-systems
Piste de recherche
Start with the Postgres adapter's serverSideEmit(..., callback) and heartbeat or server discovery flow, using the minimal reproduction in the issue. Compare callback-based emits with emits without callbacks and verify that all connected servers receive the event and return acknowledgements before any dummy emit is sent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Environment
@socket.io/postgres-adapter: 0.4.0socket.io: 4.8.xpg: 8.16.x- Node.js: 22
- PostgreSQL: 14.x
Problem description
When using serverSideEmit(..., callback), the callback is invoked with:
(err, responses) => {
console.log(err); // null
console.log(responses); // [] ← empty
}
The event is never delivered to any other server, and the handler (io.on(...)) is never triggered on them.
However, if each individual server sends at least one serverSideEmit() (even a dummy one), things start working — the events are delivered and acknowledged as expected.
Note: If
serverSideEmit()is used without a callback, the event is delivered to other servers even before they have sent any emits themselves. The issue only affects the ACK-based communication (serverSideEmit(..., callback)).
Root cause
The Postgres adapter does not deliver serverSideEmit(..., callback) events to other servers unless those servers have already started sending their own heartbeats.
Until a server sends a serverSideEmit():
- It is connected and listening on the correct
LISTENchannel - It can receive broadcast events without callback
- But it will not be discoverable by other servers for ACK-based communication (
serverSideEmit(..., callback))
As a result:
- The initiating server sends a request and waits for ACKs
- But other servers ignore the request because they don't recognize the source as active
- The callback returns with
responses = []
Minimal reproduction
// on all servers:
io.on("test-ack", (data, callback) => {
console.log("received:", data);
callback("ack from " + process.pid);
});
// on emitter server:
setTimeout(() => {
io.serverSideEmit("test-ack", "hello", (err, responses) => {
console.log("err:", err); // null
console.log("responses:", responses); // [] if heartbeat not yet started on other servers
});
}, 1000);
Workaround
Ensure that every server sends a dummy serverSideEmit() after startup to trigger the heartbeat:
io.serverSideEmit("__init__", "poke");
This ensures each server becomes discoverable by others and can participate in ACK-based messaging.
- Langage dominant
- TypeScript
- Étoiles
- 28
- Forks
- 9
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de socketio/socket.io-postgres-adapter
-
Shutting down adapterOuverte
Difficulté 3/5 1-2 jours Accessibilité débutants 43/100
socketio/socket.io-postgres-adapter#13 · 4 commentaires · 1 réaction ·
-
question
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
socketio/socket.io-postgres-adapter#12 · 4 commentaires ·
Toutes les issues de socketio/socket.io-postgres-adapter
Issues similaires
-
VS Code extension: clickable file links in chat drop the :line suffix, never jump to the lineOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
MoonshotAI/kimi-code#4398 ·
Les mainteneurs répondent en général sous 1 jour
-
Xiaomi Mimo语音识别服务异常Ouvertepending triage
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 1 jour
-
package-lock.json : les binaires natifs macOS et Linux de unrs-resolver ont disparu depuis #1823Ouvertebug dependencies
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
AxaFrance/design-system#2064 ·
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100