Skip to main content

Descripción general

laravel-bluesky proporciona dos comandos WebSocket para conectarse a los streams en tiempo real de Bluesky.
  • Jetstream: endpoint WebSocket con filtrado propio de Bluesky. Ligero, en formato JSON.
  • Firehose: stream de eventos crudo de AT Protocol. Recibe todos los datos en formato binario DAG-CBOR.
Los procesos WebSocket de larga duración requieren un servidor siempre activo como VPS o EC2, o un worker personalizado en Laravel Cloud. No funcionan en entornos serverless como Laravel Vapor o Vercel.

Instalación

La funcionalidad WebSocket requiere Workerman.

Jetstream

Descripción general

Jetstream es un servicio WebSocket con filtrado proporcionado por Bluesky. Como se puede filtrar por tipo de colección o por DID de usuario, puedes recibir eficientemente solo los eventos que necesitas.

Cómo iniciarlo

Filtro por colección

Con la opción -C puedes restringir las colecciones que quieres recibir. Se pueden indicar varias.
Principales colecciones:

Filtro por DID

Con la opción -D recibes solo los eventos de usuarios concretos.

Procesamiento de eventos

El comando Jetstream dispara eventos de Laravel según el tipo de mensaje recibido. Crea un listener para procesar los eventos.

Firehose

Descripción general

Firehose es el stream de eventos crudo de AT Protocol. Recibe todas las operaciones de record de la red Bluesky en formato binario (DAG-CBOR).
La decodificación DAG-CBOR la realiza el paquete automáticamente. En los listeners recibes los datos como arrays PHP normales.

Cómo iniciarlo

Procesamiento de eventos

El comando Firehose también usa eventos de Laravel para procesar los mensajes.

Configuración

En config/bluesky.php puedes cambiar el host de conexión y la configuración de logs.
Ejemplo de configuración en .env:

Combinación con Labeler

Puedes iniciar el servidor Labeler junto con Jetstream / Firehose. El Labeler puede aprovechar los datos de Jetstream o Firehose para procesar las solicitudes de etiquetado que recibe.
Para más detalles sobre Labeler, consulta la página Labeler.

Operación de procesos de larga duración

Los comandos WebSocket son procesos que permanecen activos durante mucho tiempo. En producción, usa una herramienta de gestión de procesos como Supervisor.

Ejemplo de configuración de Supervisor

/etc/supervisor/conf.d/bluesky-jetstream.conf:

Configuración de daemons en Laravel Forge

Si usas Laravel Forge, añade el daemon desde la sección Daemons.
  • Command: php artisan bluesky:ws start -C app.bsky.feed.post
  • Directory: /var/www/html
  • User: forge

Configuración de procesos en segundo plano en Laravel Cloud

Los comandos WebSocket actúan como cliente WebSocket que se conecta al stream de Bluesky, por lo que también funcionan en Laravel Cloud. Configúralos como proceso en segundo plano (custom worker) de Laravel Cloud. En la configuración de procesos en segundo plano de Laravel Cloud, añade un Custom Worker. Para Jetstream:
Para Firehose:
Laravel Cloud gestiona automáticamente la parada y el reinicio del proceso durante el despliegue. Aparte de la configuración del proceso en segundo plano, no hace falta configuración adicional.

Consideraciones

  • Si el proceso termina inesperadamente, se reiniciará automáticamente con autorestart=true.
  • Para evitar fugas de memoria, considera reiniciarlo periódicamente.
  • En Firehose, que recibe muchos mensajes, se recomienda que el procesamiento dentro del listener sea asíncrono (Queue Job).
Última modificación el 13 de julio de 2026