Namespace
Represents a pool of sockets connected under a given scope identified by a pathname (eg: /chat
).
More information can be found here.
namespace.name
- (String)
The namespace identifier property.
namespace.sockets
- (Map<SocketId, Socket>)
A map of Socket instances that are connected to this namespace.
// number of sockets in this namespace (on this node)
const socketCount = io.of("/admin").sockets.size;
namespace.adapter
- (Adapter)
The “Adapter” used for the namespace. Useful when using the Adapter
based on Redis, as it exposes methods to manage sockets and rooms across your cluster.
Note: the adapter of the main namespace can be accessed with io.of("/").adapter
.
Please see the explanation here.
namespace.to(room)
room
(String)- Returns
Namespace
for chaining
Sets a modifier for a subsequent event emission that the event will only be broadcasted to clients that have joined the given room
.
To emit to multiple rooms, you can call to
several times.
const io = require("socket.io")();
const adminNamespace = io.of("/admin");
adminNamespace.to("level1").emit("an event", { some: "data" });
namespace.in(room)
Synonym of namespace.to(room).
namespace.emit(eventName[, …args])
eventName
(String)args
- Returns
true
Emits an event to all connected clients. The following two are equivalent:
const io = require("socket.io")();
io.emit("an event sent to all connected clients"); // main namespace
const chat = io.of("/chat");
chat.emit("an event sent to all connected clients in chat namespace");
Note: acknowledgements are not supported when emitting from namespace.
namespace.allSockets()
- Returns
Promise<Set<SocketId>>
Gets a list of socket IDs connected to this namespace (across all nodes if applicable).
// all sockets in the main namespace
const ids = await io.allSockets();
// all sockets in the main namespace and in the "user:1234" room
const ids = await io.in("user:1234").allSockets();
// all sockets in the "chat" namespace
const ids = await io.of("/chat").allSockets();
// all sockets in the "chat" namespace and in the "general" room
const ids = await io.of("/chat").in("general").allSockets();
namespace.use(fn)
fn
(Function)
Registers a middleware, which is a function that gets executed for every incoming Socket
, and receives as parameters the socket and a function to optionally defer execution to the next registered middleware.
Errors passed to middleware callbacks are sent as special connect_error
packets to clients.
// server-side
io.use((socket, next) => {
const err = new Error("not authorized");
err.data = { content: "Please retry later" }; // additional details
next(err);
});
// client-side
socket.on("connect_error", err => {
console.log(err instanceof Error); // true
console.log(err.message); // not authorized
console.log(err.data); // { content: "Please retry later" }
});
Event: ‘connection’
socket
(Socket) socket connection with client
Fired upon a connection from client.
io.on("connection", (socket) => {
// ...
});
io.of("/admin").on("connection", (socket) => {
// ...
});
Event: ‘connect’
Synonym of Event: “connection”.
Flag: ‘volatile’
Sets a modifier for a subsequent event emission that the event data may be lost if the clients are not ready to receive messages (because of network slowness or other issues, or because they’re connected through long polling and is in the middle of a request-response cycle).
io.volatile.emit("an event", { some: "data" }); // the clients may or may not receive it
Flag: ‘local’
Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node (when the Redis adapter is used).
io.local.emit("an event", { some: "data" });