> Discover all available pages from the documentation index: https://mastra.zisheng.pro/zh-HK/llms.txt # UnixSocketPubSub `UnixSocketPubSub` 是 [`PubSub`](https://mastra.zisheng.pro/zh-HK/reference/pubsub/base) 實作,使用 Unix domain socket 在單一主機的不同進程之間傳送事件。它會選出一個進程作為 broker,其他進程則以用戶端身分連接。若 broker 結束,其餘用戶端會自動選出新的 broker。 當多個本機進程需要共用串流時可使用此實作,例如在 Mastra Code 終端介面之間協調 thread 串流。單一進程傳送請使用 [`EventEmitterPubSub`](https://mastra.zisheng.pro/zh-HK/reference/pubsub/event-emitter)。跨主機的分散式傳送請使用 [`RedisStreamsPubSub`](https://mastra.zisheng.pro/zh-HK/reference/pubsub/redis-streams) 或 [`GoogleCloudPubSub`](https://mastra.zisheng.pro/zh-HK/reference/pubsub/google-cloud-pubsub)。 `UnixSocketPubSub` 是 push 傳輸:事件無須讀取迴圈便會送達,因此 Mastra 不會為它執行 pull worker。 ## 使用範例 傳入所有參與進程共用的 socket 路徑。 ```typescript 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`): 可選設定。 ## 屬性 **socketPath** (`string`): 傳入建構函數的 socket 路徑。 **supportedModes** (`ReadonlyArray<"pull" | "push">`): 傳回 \["push"]。 **isBroker** (`boolean`): 此執行個體目前是否擔任 broker。 **remoteClientCount** (`number`): 連接至此 broker 的遠端用戶端數目。當此執行個體並非 broker 時,值一律為 0。 ## 方法 `UnixSocketPubSub` 實作 [`PubSub`](https://mastra.zisheng.pro/zh-HK/reference/pubsub/base) 合約。以下方法為此實作所特有。 ### `close()` 關閉 socket 連線;若此執行個體是 broker,亦會解除 broker 角色。請在正常關閉期間呼叫此方法。 ```typescript await pubsub.close() ``` ## Broker 選舉 第一個綁定 socket 的進程會成為 broker,並在所有已連接用戶端之間路由事件。其他進程會以用戶端身分連接。broker 結束時,獨佔鎖定檔案會依序處理下一次選舉,確保只有一個用戶端成為新 broker,其餘用戶端再向它重新訂閱。這可避免兩個進程同時擔任 broker 的腦裂狀態。