簡體中文 ▾ 主題 ▾ 最新版本 ▾ api-simple-ipc 最後更新於 2.49.0

Simple-IPC API 是一組以 ipc_ 為字首的庫例程和一套基本的通訊協議,它允許 IPC 客戶端程序向 IPC 服務端程序傳送特定於應用程式的 IPC 請求訊息,並接收特定於應用程式的 IPC 響應訊息。

通訊在 Windows 上透過命名管道進行,在其他平臺上透過 Unix 域套接字進行。IPC 客戶端和 IPC 服務端在一個預先約定好的、特定於應用程式的路徑名(超出本設計範圍)處會合,該路徑名位於計算機系統本地。

服務端應用程式程序中的 IPC 服務端例程會建立一個執行緒池,用於監聽連線並接收來自多個併發 IPC 客戶端的請求訊息。接收到這些訊息後,它們會被分派到服務端應用程式的回撥函式進行處理。然後,IPC 服務端例程會逐步將響應中繼回 IPC 客戶端。

客戶端應用程式程序中的 IPC 客戶端例程連線到 IPC 服務端併發送請求訊息,然後等待響應。接收到響應後,它會返回給呼叫者。

例如,fsmonitor--daemon 功能將作為基於 IPC 服務端庫例程的服務端應用程式構建。它將擁有監視檔案系統事件的執行緒以及等待客戶端連線的執行緒池。像 git status 這樣的客戶端將請求自某個時間點以來的檔案系統事件列表,而服務端將響應已更改檔案和目錄的列表。請求和響應的格式是應用程式特定的;IPC 客戶端和 IPC 服務端例程將它們視為不透明的位元組流。

與子程序模型的比較

Simple-IPC 機制不同於現有的 sub-process.c 模型(Documentation/technical/long-running-process-protocol.adoc),後者被 Git-LFS 等應用程式使用。在 LFS 風格的子程序模型中,輔助程式由前臺程序啟動,通訊透過繫結到子程序 stdin/stdout 的一對檔案描述符進行,子程序只服務於當前的前臺程序,並且在前臺程序終止時子程序也退出。

在 Simple-IPC 模型中,服務端是一個非常長久執行的服務。它可以同時服務多個客戶端,並擁有到每個活躍客戶端的私有套接字或命名管道連線。它可能由當前的客戶端程序按需啟動,也可能由之前的客戶端或在作業系統啟動時啟動。服務端程序不與終端關聯,並且在客戶端終止後仍然存在。客戶端無法訪問服務端程序的 stdin/stdout,因此必須透過套接字或命名管道進行通訊。

服務端的啟動和關閉

基於 IPC 服務端的應用程式服務如何啟動也不在 Simple-IPC 設計的範圍內,而是使用它的應用程式的特性。例如,服務端可能在例行維護操作期間啟動或重新啟動,或者在系統啟動序列中作為系統服務啟動,或者在需要時由前臺 Git 命令按需啟動。

同樣,服務端的關閉是使用 simple-ipc 例程的應用程式的特性。例如,服務端可能決定在空閒時或僅在明確請求時關閉。

Simple-IPC 協議

Simple-IPC 協議由客戶端發出的單個請求訊息和來自服務端的可選響應訊息組成。客戶端和服務端訊息的長度均無限制,並以重新整理資料包終止。

pkt-line 例程(gitprotocol-common[5])用於簡化訊息生成、傳輸和接收期間的緩衝區管理。重新整理資料包用於標記訊息的結束。這允許傳送方逐步生成和傳輸訊息。它允許接收方以塊為單位逐步接收訊息,並知道何時已收到整個訊息。

客戶端請求和服務端響應訊息的實際位元組格式是應用程式特定的。IPC 層將它們作為不透明位元組緩衝區進行傳輸和接收,而不關心其內部內容。呼叫應用程式層的任務是理解請求和響應訊息的內容。

總結

從概念上講,Simple-IPC 協議類似於 HTTP REST 請求。客戶端連線,發出特定於應用程式的無狀態請求,接收特定於應用程式的響應,然後斷開連線。它是一個用於查詢服務端的單次往返功能。Simple-IPC 例程隱藏了套接字、命名管道和執行緒池的詳細資訊,使應用程式層能夠專注於手頭的任務。

scroll-to-top