概觀
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 在處理接收到的標籤請求時,可利用 Jetstream 或 Firehose 的資料。Labeler 的詳情請參考 Labeler 頁面。
長時間執行程序的運作
WebSocket 指令是需要長時間常駐的程序。正式環境中請使用 Supervisor 等程序管理工具。Supervisor 設定範例
/etc/supervisor/conf.d/bluesky-jetstream.conf:
Laravel Forge 的 daemon 設定
若使用 Laravel Forge,可從 Daemons 區塊新增 daemon。- Command:
php artisan bluesky:ws start -C app.bsky.feed.post - Directory:
/var/www/html - User:
forge
Laravel Cloud 的背景程序設定
由於 WebSocket 指令是作為 WebSocket client 連線至 Bluesky 的串流,因此也可在 Laravel Cloud 執行。請將其設為 Laravel Cloud 的背景程序(自訂 worker)。 在 Laravel Cloud 的背景程序設定中新增 Custom Worker。 Jetstream 時:部署時的程序停止與重啟等作業,Laravel Cloud 端會自動處理。除背景程序設定外,無需其他額外設定。
注意事項
- 程序若意外終止,會由
autorestart=true自動重啟。 - 為防止記憶體洩漏,建議考慮定期重啟。
- 在會接收大量訊息的 Firehose 中,建議將 listener 內的處理改為非同步(Queue Job)。
Source:src/Console/WebSocket