概览
laravel-bluesky 提供了两条 WebSocket 命令,用来连接 Bluesky 的实时事件流。
- Jetstream —— Bluesky 提供的、已经过滤的 WebSocket 端点。JSON 格式,比较轻量。
- Firehose —— AT Protocol 的原始事件流。以 DAG-CBOR 二进制格式接收全部数据。
安装
WebSocket 功能依赖 Workerman。Jetstream
概览
Jetstream 是 Bluesky 提供的、已经预先过滤的 WebSocket 服务。可以按 collection 类型或用户 DID 过滤,从而只接收需要的事件,效率更高。启动方式
collection 过滤
通过-C 选项过滤要接收的 collection。可以多次指定。
DID 过滤
通过-D 选项只接收特定用户的事件。
事件处理
Jetstream 命令会根据接收到的消息类型派发 Laravel 事件。
创建事件监听器来处理事件。
Firehose
概览
Firehose 是 AT Protocol 的原始事件流。可以以二进制(DAG-CBOR)格式接收 Bluesky 网络上所有的 record 操作。DAG-CBOR 的解码由包自动完成。在事件监听器中,你可以像使用普通 PHP 数组一样处理数据。
启动方式
事件处理
Firehose 命令也是通过 Laravel 事件来处理消息。配置
可以在config/bluesky.php 中修改连接目标主机和日志配置。
.env 配置示例:
与 Labeler 结合
可以同时启动 Labeler 服务器和 Jetstream / Firehose。Labeler 处理打 label 请求时可以利用 Jetstream 或 Firehose 的数据。Labeler 的详情请参考 Labeler 页面。
长时进程的运维
WebSocket 命令是长期运行的进程。在生产环境中,请使用 Supervisor 等进程管理工具。Supervisor 配置示例
/etc/supervisor/conf.d/bluesky-jetstream.conf:
在 Laravel Forge 中配置守护进程
如果你使用 Laravel Forge,可以在 Daemons 部分添加守护进程。- Command:
php artisan bluesky:ws start -C app.bsky.feed.post - Directory:
/var/www/html - User:
forge
在 Laravel Cloud 中配置后台进程
WebSocket 命令作为 WebSocket 客户端 连接到 Bluesky 的事件流,因此在 Laravel Cloud 上也能运行。将其作为 Laravel Cloud 的后台进程(自定义 worker)配置即可。 在 Laravel Cloud 的后台进程配置中添加 Custom Worker。 Jetstream:部署时的进程停止与重启等操作,都会由 Laravel Cloud 自动处理。除了后台进程本身的配置外,不需要其他额外设置。
注意事项
- 进程意外退出时,
autorestart=true会自动将其重启。 - 为了避免内存泄漏,可以考虑定期重启。
- 对于消息量巨大的 Firehose,建议把 listener 中的处理异步化(通过 Queue Job)。
Source: src/Console/WebSocket