CHAT
Canal de mensajeria en tiempo real
URL de conexion
ws://<host>/ws/chat?token=<token>&room=<sala>&username=<nombre>
token
opcional
— token de sesion previo para reconectarse. Si se omite, el servidor genera uno nuevo.
room
opcional
— nombre de la sala. Default:
general.
username
opcional
— nombre visible en el chat.
Mensajes enviados por el cliente
↑ SEND — Enviar mensaje
{
"type": "message",
"content": "Hola a todos"
}
↑ SEND — Lista de miembros
{
"type": "members"
}
↑ SEND — Ping
{
"type": "ping"
}
Mensajes recibidos del servidor
↓ RECV — Inicio de sesion
{
"type": "init",
"channel": "chat",
"token": "uuid-del-cliente",
"room": "general",
"username": "User1",
"members": ["uuid1", "uuid2"]
}
↓ RECV — Mensaje en sala
{
"type": "message",
"channel": "chat",
"room": "general",
"from": "uuid-del-emisor",
"username": "User1",
"content": "Hola a todos",
"ts": "2024-01-01T12:00:00"
}
↓ RECV — Usuario entro / salio
{
"type": "user_joined", // o user_left
"channel": "chat",
"room": "general",
"token": "uuid",
"username": "User1",
"ts": "2024-01-01T12:00:00"
}
↓ RECV — Pong / Miembros
{ "type": "pong", "ts": "..." }
{ "type": "members",
"room": "general",
"members": ["uuid1"] }
Salas: cada valor distinto de
room crea un canal
aislado. Los mensajes solo se difunden dentro de la misma sala.
MONITOR
Canal de metricas y alertas
URL de conexion
ws://<host>/ws/monitor?token=<token>&role=<rol>
token
opcional
— token de sesion para reconectarse.
role
opcional
—
subscriber (recibe datos) o
publisher (envia datos). Default: subscriber.
Mensajes enviados por el cliente
↑ SEND — Publicar metrica
{
"type": "metric",
"data": {
"cpu": 72.5,
"ram": 4096,
"disco": 88.1
}
}
↑ SEND — Publicar alerta
{
"type": "alert",
"level": "warning",
"message": "CPU al 90%",
"data": {
"cpu": 90.2
}
}
↑ SEND — Estado / Ping
{ "type": "status" }
{ "type": "ping" }
Mensajes recibidos del servidor
↓ RECV — Inicio de sesion
{
"type": "init",
"channel": "monitor",
"token": "uuid",
"role": "subscriber",
"subscribers": 3
}
↓ RECV — Metrica recibida
{
"type": "metric",
"channel": "monitor",
"from": "uuid-del-publisher",
"data": { "cpu": 72.5 },
"ts": "2024-01-01T12:00:00"
}
↓ RECV — Alerta recibida
{
"type": "alert",
"channel": "monitor",
"from": "uuid-del-publisher",
"level": "warning",
"message": "CPU al 90%",
"data": { "cpu": 90.2 },
"ts": "2024-01-01T12:00:00"
}
↓ RECV — Estado
{
"type": "status",
"channel": "monitor",
"subscribers": 3,
"session": {
"token": "...",
"connected": true
}
}
Flujo: los
publisher envian metricas/alertas
→ el servidor las difunde a todos los suscriptores activos
(incluido el publisher mismo). Niveles validos: info,
warning, critical.
LOCATION
Canal de ubicacion en tiempo real
URL de conexion
ws://<host>/ws/location?token=<token>&group=<grupo>
token
opcional
— token de sesion para reconectarse.
group
opcional
— nombre del grupo de seguimiento. Default:
default.
Ej: fleet-01, delivery.
Mensajes enviados por el cliente
↑ SEND — Publicar ubicacion
{
"type": "location",
"lat": 19.432608,
"lng": -99.133209,
// Opcionales:
"accuracy": 5.0,
"speed": 12.3,
"heading": 270.0,
"altitude": 2240.0
}
↑ SEND — Snapshot del grupo
{
"type": "snapshot"
}
↑ SEND — Ping
{
"type": "ping"
}
Mensajes recibidos del servidor
↓ RECV — Inicio de sesion
{
"type": "init",
"channel": "location",
"token": "uuid",
"group": "fleet-01",
"snapshot": [
{
"token": "uuid2",
"lat": 19.43,
"lng": -99.13,
"ts": "..."
}
]
}
↓ RECV — Ubicacion de otro cliente
{
"type": "location",
"channel": "location",
"group": "fleet-01",
"token": "uuid-del-emisor",
"lat": 19.432608,
"lng": -99.133209,
"speed": 12.3,
"heading": 270.0,
"ts": "2024-01-01T12:00:00"
}
↓ RECV — ACK al publicar
{
"type": "ack",
"ts": "2024-01-01T12:00:00"
}
↓ RECV — Cliente salio del grupo
{
"type": "user_left",
"channel": "location",
"group": "fleet-01",
"token": "uuid",
"ts": "2024-01-01T12:00:00"
}
Broadcast selectivo: la ubicacion publicada se envia a todos
los demas miembros del grupo, no al emisor. Al conectarse, el cliente
recibe el
snapshot con las ultimas posiciones conocidas de cada
miembro activo del grupo.
SESION
Gestion de token y sesion
Primera conexion (sin token)
// El servidor devuelve un token nuevo
// en el mensaje "init" de cualquier canal.
// Guardarlo para reconexiones.
const ws = new WebSocket(
"ws://host/ws/chat?room=general"
);
ws.onmessage = (e) => {
const d = JSON.parse(e.data);
if (d.type === "init") {
localStorage.setItem("token", d.token);
}
};
Reconexion (con token)
// Pasar el token guardado en la URL.
// El servidor restaura la sesion.
const token = localStorage.getItem("token");
const ws = new WebSocket(
`ws://host/ws/chat?room=general&token=${token}`
);
TTL: una sesion sin cliente conectado expira despues de
30 minutos. Mientras el WebSocket este abierto, la sesion no
expira. Usar
type: "ping" para mantener activa la conexion en
redes inestables.
Endpoints REST de utilidad
GET /status
— estado global del servidor (salas, grupos, suscriptores activos)
GET /sessions
— lista de sesiones activas