UnixSocketPubSub
UnixSocketPubSub 是 PubSub 實作,使用 Unix domain socket 在單一主機的不同進程之間傳送事件。它會選出一個進程作為 broker,其他進程則以用戶端身分連接。若 broker 結束,其餘用戶端會自動選出新的 broker。
當多個本機進程需要共用串流時可使用此實作,例如在 Mastra Code 終端介面之間協調 thread 串流。單一進程傳送請使用 EventEmitterPubSub。跨主機的分散式傳送請使用 RedisStreamsPubSub 或 GoogleCloudPubSub。
UnixSocketPubSub 是 push 傳輸:事件無須讀取迴圈便會送達,因此 Mastra 不會為它執行 pull worker。
使用範例使用範例 的直接連結
傳入所有參與進程共用的 socket 路徑。
src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { UnixSocketPubSub } from '@mastra/core/events'
export const mastra = new Mastra({
pubsub: new UnixSocketPubSub('/tmp/mastra/events.sock'),
})
建構函數參數建構函數參數 的直接連結
socketPath:
string
Unix domain socket 的路徑。共用串流的所有進程都必須使用相同路徑。
options?:
UnixSocketPubSubOptions
可選設定。
number
屬性屬性 的直接連結
socketPath:
string
傳入建構函數的 socket 路徑。
supportedModes:
ReadonlyArray<"pull" | "push">
傳回
["push"]。isBroker:
boolean
此執行個體目前是否擔任 broker。
remoteClientCount:
number
連接至此 broker 的遠端用戶端數目。當此執行個體並非 broker 時,值一律為 0。
方法方法 的直接連結
UnixSocketPubSub 實作 PubSub 合約。以下方法為此實作所特有。
close()close 的直接連結
關閉 socket 連線;若此執行個體是 broker,亦會解除 broker 角色。請在正常關閉期間呼叫此方法。
await pubsub.close()
Broker 選舉Broker 選舉 的直接連結
第一個綁定 socket 的進程會成為 broker,並在所有已連接用戶端之間路由事件。其他進程會以用戶端身分連接。broker 結束時,獨佔鎖定檔案會依序處理下一次選舉,確保只有一個用戶端成為新 broker,其餘用戶端再向它重新訂閱。這可避免兩個進程同時擔任 broker 的腦裂狀態。