處理序間通訊

Windows作業系統提供機制來促進應用程式之間的通訊和資料共用。 整體上,這些機制所啟用的活動稱為 IPC (間通訊) 。 某些形式的 IPC 可協助在數個特製化程式之間劃分人力。 其他類型的 IPC 可協助在網路上的電腦之間分工。

一般而言,應用程式可以使用分類為用戶端或伺服器的 IPC。 用戶端是應用程式或進程,會向其他應用程式或進程要求服務。 伺服器是回應用戶端要求的應用程式或進程。 許多應用程式會同時作為用戶端和伺服器,視情況而定。 例如,文字處理應用程式可能會作為用戶端,從做為伺服器的試算表應用程式要求製造成本的摘要表。 接著,試算表應用程式可能會作為用戶端,從自動化清查控制應用程式要求最新的清查等級。

決定您的應用程式會受益于 IPC 之後,您必須決定要使用哪一個可用的 IPC 方法。 應用程式可能會使用數個 IPC 機制。 這些問題的解答會決定應用程式是否可以使用一或多個 IPC 機制來受益。

  • 應用程式是否應該能夠與網路上其他電腦上執行的其他應用程式通訊,或者應用程式是否足以與本機電腦上的應用程式通訊?
  • 應用程式應該能夠與在其他電腦上執行的應用程式通訊,這些應用程式可能在不同的作業系統上執行, (例如 16 位Windows或 UNIX) ?
  • 應用程式的使用者是否必須選擇應用程式通訊的其他應用程式,或者應用程式是否可以隱含地尋找其夥伴?
  • 應用程式應該以一般方式與許多不同的應用程式通訊,例如允許與其他應用程式進行剪下和貼上作業,或其通訊需求是否受限於與特定其他應用程式的一組限制互動?
  • 效能是否為應用程式的重要層面? 所有 IPC 機制都包含一些額外負荷。
  • 應用程式是否為 GUI 應用程式或主控台應用程式? 某些 IPC 機制需要 GUI 應用程式。

Windows支援下列 IPC 機制:

使用 IPC 的剪貼簿

剪貼簿可作為應用程式之間資料共用的中央保存庫。 當使用者在應用程式中執行剪下或複製作業時,應用程式會將選取的資料放在剪貼簿上一或多個標準或應用程式定義的格式。 然後,任何其他應用程式都可以從剪貼簿擷取資料,從它瞭解的可用格式中選擇。 剪貼簿是非常鬆散結合的交換媒體,其中應用程式只需要同意資料格式。 應用程式可以位於同一部電腦或網路上的不同電腦上。

關鍵點: 所有應用程式都應該針對他們瞭解的資料格式支援剪貼簿。 例如,文字編輯器或文字處理器至少應該能夠產生並接受純文字格式的剪貼簿資料。 如需詳細資訊,請參閱 剪貼簿

使用 COM 進行 IPC

使用 OLE 管理 複合檔案的應用程式,也就是由各種不同應用程式所組成之資料的檔。 OLE 提供服務,可讓應用程式輕鬆呼叫其他應用程式以進行資料編輯。 例如,使用 OLE 的字處理器可以從試算表內嵌圖形。 使用者可以選擇要編輯的內嵌圖表,從文字處理器內自動啟動試算表。 OLE 負責啟動試算表,並呈現圖表以供編輯。 當使用者結束試算表時,圖形會在原始文字處理器檔中更新。 試算表似乎是字處理器的延伸模組。

OLE 的基礎是元件物件模型 (COM) 。 使用 COM 的軟體元件可以與各種不同的其他元件通訊,即使是尚未撰寫的元件也一樣的元件。 元件會與物件和用戶端互動。 分散式 COM 會擴充 COM 程式設計模型,使其可在網路上運作。

關鍵點: OLE 支援複合檔案,並讓應用程式包含內嵌或連結的資料,當選擇時,會自動啟動另一個應用程式進行資料編輯。 這可讓任何其他使用 OLE 的應用程式擴充應用程式。 COM 物件可透過一或多個相關函式集來存取物件的資料,稱為 介面。 如需詳細資訊,請參閱 COM 和 ActiveX Object Services。

使用 IPC 的資料複製

資料複製可讓應用程式使用 WM_COPYDATA 訊息,將資訊傳送至另一個應用程式。 這個方法需要傳送應用程式與接收應用程式之間的合作。 接收應用程式必須知道資訊的格式,而且能夠識別寄件者。 傳送的應用程式無法修改任何指標所參考的記憶體。

關鍵點:資料複製可用來使用Windows傳訊,快速將資訊傳送至另一個應用程式。 如需詳細資訊,請參閱 資料複製

使用 DDE 進行 IPC

DDE 是一種通訊協定,可讓應用程式以各種格式交換資料。 應用程式可以使用 DDE 進行一次性資料交換,或進行中的交換,讓應用程式在新的資料可供使用時彼此更新。

DDE 所使用的資料格式與剪貼簿所使用的資料格式相同。 DDE 可視為剪貼簿機制的延伸。 剪貼簿幾乎一律用於使用者命令的單次回應,例如從功能表選擇 [貼上] 命令。 DDE 通常是由使用者命令起始,但它通常會繼續運作,而不需進一步的使用者互動。 您也可以針對具有更緊密結合通訊需求的應用程式之間,針對特殊用途 IPC 定義自訂的 DDE 資料格式。

在相同電腦或網路上不同電腦上執行的應用程式之間,可能會發生 DDE 交換。

關鍵點: DDE 不像較新的技術一樣有效率。 不過,如果其他 IPC 機制不適合,或您必須與僅支援 DDE 的現有應用程式進行介面,您仍然可以使用 DDE。 如需詳細資訊,請參閱動態資料Exchange動態資料Exchange管理程式庫

使用 IPC 的檔案對應

檔案對應 可讓進程將檔案的內容視為進程位址空間中的記憶體區塊。 此程式可以使用簡單的指標作業來檢查和修改檔案的內容。 當兩個或多個進程存取相同的檔案對應時,每個進程都會在其自己的位址空間中收到記憶體指標,可用來讀取或修改檔案的內容。 進程必須使用同步處理物件,例如旗號,以防止多工環境中的資料損毀。

您可以使用檔案對應的特殊案例,在進程之間提供 具名的共用記憶體 。 如果您在建立檔案對應物件時指定系統交換檔案,則會將檔案對應物件視為共用記憶體區塊。 其他進程可以開啟相同的檔案對應物件來存取相同的記憶體區塊。

檔案對應相當有效率,也提供作業系統支援的安全性屬性,有助於防止未經授權的資料損毀。 檔案對應只能在本機電腦上的進程之間使用;它無法透過網路使用。

關鍵點: 檔案對應是讓同一部電腦上兩個或多個進程共用資料的有效方式,但您必須在進程之間提供同步處理。 如需詳細資訊,請參閱 檔案對應同步處理

使用 Mailslot for IPC

Mailslots 提供單向通訊。 任何建立 mailslot 的程式都是 mailslot 伺服器。 其他稱為 mailslot 用戶端的程式,會藉由將訊息寫入其 mailslot,將訊息傳送至 mailslot 伺服器。 內送郵件一律會附加至 mailslot。 mailslot 會儲存郵件,直到 mailslot 伺服器讀取郵件為止。 程式可以是 mailslot 伺服器和 mailslot 用戶端,因此可以使用多個 mailslot 進行雙向通訊。

mailslot 用戶端可以將郵件傳送至本機電腦上的郵件圖、另一部電腦上的郵件圖,或傳送至指定網路網域中所有電腦上具有相同名稱的所有郵件集。 廣播到網域上所有 mailslot 的郵件不能超過 400 個位元組,而傳送至單一郵件集的郵件只會受限於 mailslot 伺服器在建立 mailslot 時所指定的郵件大小上限。

關鍵點: Mailslots 提供簡單的方式,讓應用程式能夠傳送和接收簡短訊息。 它們也可讓您在網路網域中的所有電腦上廣播訊息。 如需詳細資訊,請參閱 Mailslots

使用 IPC 的管道

雙向通訊有兩種類型的管道:匿名管道和具名管道。 匿名管道 可讓相關程式彼此傳輸資訊。 一般而言,匿名管道用於重新導向子進程的標準輸入或輸出,以便與父進程交換資料。 若要以雙工作業 (雙向交換資料) ,您必須建立兩個匿名管道。 父進程會使用寫入控制碼將資料寫入一個管道,而子進程會使用其讀取控制碼從該管道讀取資料。 同樣地,子進程會將資料寫入另一個管道,而父進程會從中讀取資料。 匿名管道無法透過網路使用,也無法在不相關的進程之間使用。

具名管道 可用來在不是相關進程和不同電腦上的進程之間傳輸資料。 一般而言,具名管道伺服器進程會建立具有已知名稱的具名管道,或要與其用戶端通訊的名稱。 知道管道名稱的具名管道用戶端進程可以開啟其另一端,受限於具名管道伺服器進程所指定的存取限制。 伺服器和用戶端連線到管道之後,就可以在管道上執行讀取和寫入作業來交換資料。

關鍵點: 匿名管道提供有效率的方式,可將標準輸入或輸出重新導向至同一部電腦上的子進程。 具名管道提供簡單的程式設計介面,可在兩個進程之間傳輸資料,無論是位於同一部電腦或透過網路。 如需詳細資訊,請參閱 管道

使用 RPC 進行 IPC

RPC 可讓應用程式從遠端呼叫函式。 因此,RPC 可讓 IPC 與呼叫函式一樣簡單。 RPC 會在單一電腦或網路上不同電腦上的進程之間運作。

Windows提供的 RPC 符合 Open Software Foundation (OSF) Distributed Computing Environment (DCE) 。 這表示使用 RPC 的應用程式能夠與其他支援 DCE 作業系統的應用程式進行通訊。 RPC 會自動支援資料轉換以考慮不同的硬體架構,以及不同環境之間的位元組順序。

RPC 用戶端和伺服器緊密結合,但仍維持高效能。 系統會廣泛使用 RPC,以協助作業系統不同部分之間的用戶端/伺服器關聯性。

關鍵點: RPC 是函式層級介面,支援自動資料轉換和其他作業系統的通訊。 使用 RPC,您可以建立高效能且緊密結合的分散式應用程式。 如需詳細資訊,請參閱 Microsoft RPC 元件

針對 IPC 使用Windows通訊端

Windows Sockets 是與通訊協定無關的介面。 它會利用基礎通訊協定的通訊功能。 在 Windows Sockets 2 中,通訊端控制碼可以選擇性地當做具有標準檔案 I/O 函式的檔案控制碼使用。

Windows通訊端是以 Berkeley Software Distribution (BSD) 第一次熱門的通訊端為基礎。 使用 Windows Sockets 的應用程式可以在其他類型的系統上與其他通訊端實作通訊。 不過,並非所有傳輸服務提供者都支援所有可用的選項。

重點:Windows通訊端是一種通訊協定獨立介面,可支援目前和新興的網路功能。 如需詳細資訊,請參閱Windows Sockets 2