The Socket instance
Table of content
Besides emitting and listening to events, the Socket instance has a few attributes that may be of use in your application:
Socket#id
Each new connection is assigned a random 20-characters identifier.
This identifier is synced with the value on the server-side.
Server
io.on("connection", (socket) => {
console.log(socket.id); // x8WIv7-mJelg7on_ALbx
});
Client
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println(socket.id()); // x8WIv7-mJelg7on_ALbx
}
});
socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println(socket.id()); // null
}
});
Socket#connected
This attribute describes whether the socket is currently connected to the server.
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println(socket.connected()); // true
}
});
socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println(socket.connected()); // false
}
});
Lifecycle

Events
Socket.EVENT_CONNECT
This event is fired by the Socket instance upon connection / reconnection.
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
// ...
}
});
Please note that you shouldn’t register event handlers in the connect handler itself, as a new handler will be registered every time the Socket reconnects:
// BAD
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
socket.on("data", new Emitter.Listener() {
@Override
public void call(Object... args) {
// ...
}
});
}
});
// GOOD
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
// ...
}
});
socket.on("data", new Emitter.Listener() {
@Override
public void call(Object... args) {
// ...
}
});
Socket.EVENT_CONNECT_ERROR
This event is fired when the server does not accept the connection (in a middleware function).
You need to manually reconnect. You might need to update the credentials:
socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
options.auth.put("authorization", "bearer 1234");
socket.connect();
}
});
Socket.EVENT_DISCONNECT
This event is fired upon disconnection.
socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println(socket.id()); // null
}
});
Here is the list of possible reasons:
| Reason | Description |
|---|---|
io server disconnect |
The server has forcefully disconnected the socket with socket.disconnect() |
io client disconnect |
The socket was manually disconnected using socket.disconnect() |
ping timeout |
The server did not respond in the pingTimeout range |
transport close |
The connection was closed (example: the user has lost connection, or the network was changed from WiFi to 4G) |
transport error |
The connection has encountered an error (example: the server was killed during a HTTP long-polling cycle) |
Note: those events, along with disconnecting, newListener and removeListener, are special events that shouldn’t be used in your application:
// BAD, will throw an error
socket.emit("disconnect");
