WebSocketPair for creating connected socket pairs.
Overview
Workerd provides:- Standard
WebSocketinterface for client connections WebSocketPairfor creating connected socket pairsCloseEventfor handling connection closure- Hibernation support for Durable Objects
src/workerd/api/web-socket.h and web-socket.c++
WebSocketPair
Create a pair of connected WebSockets:src/workerd/api/tests/websocket-test.js
Accepting WebSocket connections
Handle the WebSocket upgrade:Sending messages
Text messages
Binary messages
JSON messages
Receiving messages
Listen for messages with event listeners:Parsing JSON messages
Closing connections
Graceful close
Close event
Handle connection closure:Close codes
Common WebSocket close codes:1000- Normal closure1001- Going away (e.g., server shutdown)1002- Protocol error1003- Unsupported data1006- Abnormal closure (no close frame)1008- Policy violation1009- Message too big1011- Internal server error
Error handling
Handle errors with event listeners:Durable Objects chat example
Complete example fromsrc/workerd/api/samples/durable-objects-chat/chat.js:
src/workerd/api/samples/durable-objects-chat/chat.js:213
Hibernatable WebSockets
Durable Objects can use hibernatable WebSockets to reduce memory usage:src/workerd/api/hibernatable-web-socket.h
Best practices
Always call accept()
Always call accept()
The server-side WebSocket must call
accept() before sending or receiving messages:Handle connection errors
Handle connection errors
Always add error and close event listeners:
Validate messages
Validate messages
Always validate and sanitize incoming messages:
Implement rate limiting
Implement rate limiting
Protect against message spam:
CloseEvent
TheCloseEvent interface provides information about connection closure:
src/workerd/api/web-socket.h:32
Implementation details
The WebSocket API is implemented in:src/workerd/api/web-socket.h/.c++- Main WebSocket implementation (1700+ lines)src/workerd/api/hibernatable-web-socket.h/.c++- Hibernation support for Durable Objects
Related APIs
- Durable Objects - Stateful WebSocket servers
- Fetch API - WebSocket upgrade requests
- Streams API - Can be used with WebSocket data