跳至主要內容

UnixSocketPubSub

UnixSocketPubSubPubSub 實作,使用 Unix domain socket 在單一主機的不同進程之間傳送事件。它會選出一個進程作為 broker,其他進程則以用戶端身分連接。若 broker 結束,其餘用戶端會自動選出新的 broker。

當多個本機進程需要共用串流時可使用此實作,例如在 Mastra Code 終端介面之間協調 thread 串流。單一進程傳送請使用 EventEmitterPubSub。跨主機的分散式傳送請使用 RedisStreamsPubSubGoogleCloudPubSub

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 的腦裂狀態。