設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.43.1 → 2.47.0 沒有變更
-
2.43.0
11/20/23
- 2.38.1 → 2.42.3 沒有變更
-
2.38.0
10/02/22
- 2.32.1 → 2.37.7 沒有變更
-
2.32.0
06/06/21
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.txt)不同,後者被 Git-LFS 等應用程式所使用。在 LFS 風格的子程序模型中,輔助程式是由前景程序啟動,通訊透過一對繫結到子程序 stdin/stdout 的檔案描述器進行,子程序僅為目前的前景程序服務,並且當前景程序終止時,子程序會結束。
在 Simple-IPC 模型中,伺服器是一個長時間運行的服務。它可以同時服務多個客戶端,並且每個作用中的客戶端都有一個私有的套接字或具名管道連線。它可以由目前客戶端程序按需啟動,或者可能由先前的客戶端或 OS 在啟動時啟動。伺服器程序與終端機沒有關聯,並且在客戶端終止後仍然存在。客戶端無法存取伺服器程序的 stdin/stdout,因此必須透過套接字或具名管道進行通訊。
伺服器啟動和關閉
基於 IPC 伺服器的應用程式伺服器如何啟動也不在 Simple-IPC 設計的範圍內,而是使用它的應用程式的屬性。例如,伺服器可能會在例行維護操作期間啟動或重新啟動,或者可能在系統啟動順序期間作為系統服務啟動,或者可能在需要時由前景 Git 命令按需啟動。
同樣地,伺服器關閉也是使用 simple-ipc 例程的應用程式的屬性。例如,伺服器可能會決定在閒置時或僅在收到明確請求時關閉。
Simple-IPC 協議
Simple-IPC 協議由來自客戶端的單個請求訊息和來自伺服器的可選回應訊息組成。客戶端和伺服器訊息的長度都不受限制,並以刷新封包終止。
pkt-line 例程(gitprotocol-common[5])用於簡化訊息產生、傳輸和接收期間的緩衝區管理。刷新封包用於標記訊息的結束。這允許發送者逐步產生和傳輸訊息。它允許接收者逐步接收訊息,並且知道何時已接收到整個訊息。
客戶端請求和伺服器回應訊息的實際位元組格式是應用程式特定的。IPC 層會傳輸和接收它們作為不透明的位元組緩衝區,而不關心其中的內容。了解請求和回應訊息的內容是呼叫應用程式層的工作。