WebSocket heartbeat simple (Ratchet) y ejemplo Flutter

Instalación (PHP / Ratchet)

1. Instala dependencias PHP:

   composer require

   o si prefieres instalar desde composer.json actualizado:

   composer install

2. Ejecuta el servidor WebSocket (desde la raíz del proyecto):

   php ws-server.php

   Por defecto el servidor escucha en ws://0.0.0.0:8080

Protocolo

- Conectar: ws://host:8080?token=<api_token>
- Mensaje para enviar pulso (desde cliente):
  { "type": "pulse" }

Servidor envía:
- Al conectar: { "message": "connected", "user": { id, name } }
- A la pareja cuando recibe pulse: { "type": "pulse", "from": { id, name }, "timestamp": 123 }
- Al emisor: { "type": "pulse_ack", "timestamp": 123 }

Ejemplo Flutter (usar dependency web_socket_channel)

import 'package:web_socket_channel/web_socket_channel.dart';

final channel = WebSocketChannel.connect(
  Uri.parse('ws://YOUR_HOST:8080?token=YOUR_API_TOKEN'),
);

// Escuchar mensajes:
channel.stream.listen((message) {
  print('received: $message');
});

// Enviar pulso:
channel.sink.add('{"type":"pulse"}');

// Cerrar:
channel.sink.close();
