Skip to main content

概觀

laravel-bluesky 提供兩個 WebSocket 指令,可連接至 Bluesky 的即時串流。
  • Jetstream — Bluesky 專屬的已過濾 WebSocket 端點。以 JSON 格式提供,輕量。
  • Firehose — AT Protocol 的原始事件串流。以 DAG-CBOR 二進位格式接收所有資料。
WebSocket 這類長時間執行的程序需要 VPS 或 EC2 等常態啟動的伺服器,或 Laravel Cloud 的自訂 worker。無法在 Laravel Vapor 或 Vercel 等無伺服器環境運行。

安裝

WebSocket 功能需要 Workerman

Jetstream

概觀

Jetstream 是 Bluesky 提供的已過濾 WebSocket 服務。可依 collection 種別或使用者 DID 過濾,因此能高效地只接收所需事件。

啟動方式

Collection 過濾

透過 -C 選項篩選要接收的 collection。可指定多個。
主要 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。
  • Commandphp artisan bluesky:ws start -C app.bsky.feed.post
  • Directory/var/www/html
  • Userforge

Laravel Cloud 的背景程序設定

由於 WebSocket 指令是作為 WebSocket client 連線至 Bluesky 的串流,因此也可在 Laravel Cloud 執行。請將其設為 Laravel Cloud 的背景程序(自訂 worker)。 在 Laravel Cloud 的背景程序設定中新增 Custom Worker Jetstream 時:
Firehose 時:
部署時的程序停止與重啟等作業,Laravel Cloud 端會自動處理。除背景程序設定外,無需其他額外設定。

注意事項

  • 程序若意外終止,會由 autorestart=true 自動重啟。
  • 為防止記憶體洩漏,建議考慮定期重啟。
  • 在會接收大量訊息的 Firehose 中,建議將 listener 內的處理改為非同步(Queue Job)。
最後修改於 2026年8月2日