| When | Headers? |
|---|---|
| WebSocket connect | Yes — Authorization: Bearer <jwt> on the Postman WebSocket request |
| Each chat message | No — WebSocket frames are JSON only, not HTTP. Use body or rely on identity from connect header |
After connect with a header token, you can send join_room / message without repeating the token.
Alternative (no JWT): send userId + username in the JSON body.
go mod tidy
go run .- Connect → receive
connectevent with emptyrooms: [] - Join room (required) → send
join_roomevent - Send messages → other members in the room broadcast
POST /api/auth/token→ get JWT- WebSocket URL:
ws://127.0.0.1:8080/ws - Header:
Authorization: Bearer <jwt> - Connect → receive
connectwithrooms: [] - Join room:
{
"type": "join_room",
"payload": { "roomId": "general" }
}- Then send messages:
{
"type": "message",
"payload": {
"roomId": "general",
"text": "Hello!"
}
}Connect, then join and message with identity in payload:
{
"type": "join_room",
"userId": "user-alice",
"username": "alice",
"payload": { "roomId": "general" }
}{
"type": "message",
"userId": "user-alice",
"username": "alice",
"payload": {
"roomId": "general",
"text": "Hello!"
}
}{
"type": "message",
"token": "eyJhbG...",
"payload": {
"roomId": "general",
"text": "Hello!"
}
}Priority: token → userId+username → identity from connect header.
| Tab | Connect header | Join | Message |
|---|---|---|---|
| Alice | Bearer <alice-jwt> |
join_room (no auth needed in payload) |
Message broadcasts to room |
| Bob | Bearer <bob-jwt> |
same | same |
Both must explicitly join_room for general to receive each other's broadcasts.
Someone closes Postman / loses connection → other clients in the room receive:
{
"type": "disconnected",
"user": { "id": "user-alice", "username": "alice" },
"payload": {
"reason": "connection_closed",
"roomId": "general",
"sessionId": "...",
"memberCount": 1
}
}Then a leave event with updated memberCount.
Graceful disconnect (before closing WS):
{
"type": "disconnect",
"payload": { "reason": "user_logged_out" }
}You get a disconnected ack; others in your rooms are notified too.
connect · join_room · leave · disconnect · disconnected · message · mute · unmute
Import postman/websocket-chat.postman_collection.json.