Debugging WebSocket Applications

1. Using Browser DevTools

TabUse
Network → filter WSConnection list
MessagesFrame stream
HeadersHandshake req/res
ConsoleInspect ws instance

2. Inspecting WebSocket Frames

IndicatorMeaning
↑ greenClient → Server text
↓ greenServer → Client text
redControl frame (close/ping/pong)
binaryShown as hex

3. Monitoring Connection State

Example: Console probe

console.log(ws.readyState, ws.bufferedAmount, ws.extensions, ws.protocol);
PropertyInsight
readyStateCurrent phase
bufferedAmountBackpressure
extensionsCompression on?
protocolNegotiated subprotocol

4. Logging Messages

Example: Conditional verbose log

if (localStorage.WS_DEBUG === "1") {
  ws.addEventListener("message", (e) => console.debug("← ws", e.data));
  const origSend = ws.send.bind(ws);
  ws.send = (d) => { console.debug("→ ws", d); origSend(d); };
}

5. Using wscat Tool

Example: wscat session

npm i -g wscat
wscat -c wss://api.example.com/ws -s chat.v2 -H "Authorization: Bearer $TOKEN"
> {"type":"ping"}
< {"type":"pong"}
FlagUse
-cConnect URL
-sSubprotocol
-HCustom header
-xSend + exit

6. Using Postman WebSocket

FeatureDetail
Saved requestsReusable WS sessions
Auth helpersBearer, Basic, etc.
Messages historyInspect direction + timing
JSON viewerPretty-print payloads

7. Implementing Debug Mode

TriggerEffect
Env WS_DEBUG=1Verbose logs
Query ?debug=1Client-side log
Header on msgServer echoes meta back

8. Capturing Network Traffic

ToolDetail
WiresharkFrame-level (needs TLS keys)
tcpdumpServer-side capture
SSLKEYLOGFILEDecrypt TLS in Wireshark
mitmproxyIntercept + modify

9. Debugging Server Code

ToolDetail
node --inspectChrome DevTools attach
VS Code debuggerBreakpoints, watch
Pino transportPretty + persisted
Async hooksTrace async ctx

10. Analyzing Performance Issues

SymptomLikely Cause
High bufferedAmountSlow network / consumer
CPU spikesJSON parse / deflate
Memory growthListener / queue leak
StallsSynchronous handler blocking event loop