Skip to content

Issue with .to(room).emitWithAck() #5333

Open
@terryluan12

Description

@terryluan12

Describe the bug
I came across a bug where if you broadcast an event to a room, it times out unless you explicitly set a timeout variable.

To Reproduce

Please fill the following code example:

Socket.IO server version: ^4.0.0

Server

import { createServer } from "node:http";
import { readFile } from "node:fs/promises";
import { Server } from "socket.io";

const port = process.env.PORT || 3000;

const httpServer = createServer(async (req, res) => {
  if (req.url !== "/") {
    res.writeHead(404);
    res.end("Not found");
    return;
  }
  // reload the file every time
  const content = await readFile("index.html");

  res.writeHead(200, {
    "Content-Type": "text/html",
    "Content-Length": Buffer.byteLength(content),
  });
  res.end(content);
});

const io = new Server(httpServer, {});

const roomCode = "Test room code"

io.on("connection", (socket) => {
  console.log(`connect ${socket.id}`);

  socket.on("joinRoom", async (username, ack) => {
    console.log(`${username} joining`);
    socket.join(roomCode);

    // This doesn't work
    const response = await socket.to(roomCode).emitWithAck("userJoined", username);

    // This does
    // const response = await socket.to(roomCode).timeout(5000).emitWithAck("userJoined", username);

    ack(response);
  })

});

httpServer.listen(port, () => {
  console.log(`server listening at http://localhost:${port}`);
});

Socket.IO client version: ^4.0.0

Client

import { io } from "socket.io-client";

const port = process.env.PORT || 3000;

const socket = io(`http://localhost:${port}`);
const socket2 = io(`http://localhost:${port}`);


socket.on("userJoined", (username, ack) => {
  ack("username1")
})

const response1 = await socket.emitWithAck("joinRoom", "username1");
console.log(`Response 1 is ${response1}`);

const response2 = await socket2.emitWithAck("joinRoom", "username2")
console.log(`Response 2 is ${response2}`);

Expected behavior
It should work with or without the explicit timeout set.

Platform:

  • OS: Ubuntu 22.04.5 LTS

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions