@Configuration@EnableWebSocketpublic class WsConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry r) { r.addHandler(new EchoHandler(), "/ws").setAllowedOrigins("*"); }}public class EchoHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession s, TextMessage m) throws IOException { s.sendMessage(new TextMessage("echo:" + m.getPayload())); }}
Stack
Detail
Jakarta WebSocket (JSR 356)
Standard API
Spring WebSocket
STOMP support
Spring Reactive (Netty)
Non-blocking
Vert.x
Polyglot, async
8. Using WebSocket in Rust
Crate
Use
tokio-tungstenite
Async, on tokio
axum + tokio-tungstenite
Web framework integration
actix-web-actors
Actor-based
warp
Filter-based ergonomics
9. Using WebSocket in Worker Threads
Use Case
Detail
Off-main-thread parsing
JSON/protobuf in Worker
Shared connection
SharedWorker — one socket per origin across tabs
Audio/video processing
Pipe binary frames
Example: SharedWorker WS bridge
// shared-worker.jsconst ws = new WebSocket("wss://api.example.com/ws");const ports = new Set();onconnect = (e) => { const port = e.ports[0]; ports.add(port); port.onmessage = (ev) => ws.send(ev.data);};ws.addEventListener("message", (e) => { for (const p of ports) p.postMessage(e.data); });
10. Using WebSocket in Service Workers
Warning: Service Workers are short-lived and cannot keep a long-lived WebSocket open. Use them only for push notifications + waking the page; place the WS in the page or SharedWorker.