Called when a connection is closed.
Symbol
WebSocketHandler.close
The websocket that was closed
The close code
The close reason
Referenced types
interface ServerWebSocket<T = undefined>
A fast WebSocket designed for servers.
Features:
- Message compression - Messages can be compressed
- Backpressure - If the client is not ready to receive data, the server will tell you.
- Dropped messages - If the client cannot receive data, the server will tell you.
- Topics - Messages can be ServerWebSocket.published to a specific topic and the client can ServerWebSocket.subscribe to topics
This is slightly different than the browser WebSocket which Bun supports for clients.
Powered by uWebSockets.
Bun.serve({
websocket: {
open(ws) {
console.log("Connected", ws.remoteAddress);
},
message(ws, data) {
console.log("Received", data);
ws.send(data);
},
close(ws, code, reason) {
console.log("Disconnected", code, reason);
},
}
});
- binaryType?: 'arraybuffer' | 'uint8array' | 'nodebuffer'
Sets how binary data is returned in events.
- if
nodebuffer
, binary data is returned asBuffer
objects. (default) - if
arraybuffer
, binary data is returned asArrayBuffer
objects. - if
uint8array
, binary data is returned asUint8Array
objects.
let ws: WebSocket; ws.binaryType = "uint8array"; ws.addEventListener("message", ({ data }) => { console.log(data instanceof Uint8Array); // true });
- if
- data: T
Custom data that you can assign to a client, can be read and written at any time.
import { serve } from "bun"; serve({ fetch(request, server) { const data = { accessToken: request.headers.get("Authorization"), }; if (server.upgrade(request, { data })) { return; } return new Response(); }, websocket: { open(ws) { console.log(ws.data.accessToken); } } });
- readonly readyState: WebSocketReadyState
The ready state of the client.
- if
0
, the client is connecting. - if
1
, the client is connected. - if
2
, the client is closing. - if
3
, the client is closed.
console.log(socket.readyState); // 1
- if
- readonly remoteAddress: string
The IP address of the client.
console.log(socket.remoteAddress); // "127.0.0.1"
Closes the connection.
Here is a list of close codes:
1000
means "normal closure" (default)1009
means a message was too big and was rejected1011
means the server encountered an error1012
means the server is restarting1013
means the server is too busy or the client is rate-limited4000
through4999
are reserved for applications (you can use it!)
To close the connection abruptly, use
terminate()
.@param codeThe close code to send
@param reasonThe close reason to send
Batches
send()
andpublish()
operations, which makes it faster to send data.The
message
,open
, anddrain
callbacks are automatically corked, so you only need to call this if you are sending messages outside of those callbacks or in async functions.@param callbackThe callback to run.
ws.cork((ctx) => { ctx.send("These messages"); ctx.sendText("are sent"); ctx.sendBinary(new TextEncoder().encode("together!")); });
Is the client subscribed to a topic?
@param topicThe topic name.
ws.subscribe("chat"); console.log(ws.isSubscribed("chat")); // true
Sends a message to subscribers of the topic.
@param topicThe topic name.
@param dataThe data to send.
@param compressShould the data be compressed? If the client does not support compression, this is ignored.
ws.publish("chat", "Hello!"); ws.publish("chat", "Compress this.", true); ws.publish("chat", new Uint8Array([1, 2, 3, 4]));
Sends a binary message to subscribers of the topic.
@param topicThe topic name.
@param dataThe data to send.
@param compressShould the data be compressed? If the client does not support compression, this is ignored.
ws.publish("chat", new TextEncoder().encode("Hello!")); ws.publish("chat", new Uint8Array([1, 2, 3, 4]), true);
Sends a text message to subscribers of the topic.
@param topicThe topic name.
@param dataThe data to send.
@param compressShould the data be compressed? If the client does not support compression, this is ignored.
ws.publish("chat", "Hello!"); ws.publish("chat", "Compress this.", true);
Sends a message to the client.
@param dataThe data to send.
@param compressShould the data be compressed? If the client does not support compression, this is ignored.
ws.send("Hello!"); ws.send("Compress this.", true); ws.send(new Uint8Array([1, 2, 3, 4]));
Sends a binary message to the client.
@param dataThe data to send.
@param compressShould the data be compressed? If the client does not support compression, this is ignored.
ws.send(new TextEncoder().encode("Hello!")); ws.send(new Uint8Array([1, 2, 3, 4]), true);
Sends a text message to the client.
@param dataThe data to send.
@param compressShould the data be compressed? If the client does not support compression, this is ignored.
ws.send("Hello!"); ws.send("Compress this.", true);
Subscribes a client to the topic.
@param topicThe topic name.
ws.subscribe("chat");
Abruptly close the connection.
To gracefully close the connection, use
close()
.Unsubscribes a client to the topic.
@param topicThe topic name.
ws.unsubscribe("chat");