如何與群組合作
點對點群組是一種技術,可讓開發人員快速且有效地建立安全的對等網路。 下列清單會識別建立對等群組應用程式的主要考慮。
取得同儕身份
在創建或連接到群組之前,同儕必須獲得一個同儕識別,這是用於在群組中唯一識別同儕的名稱。 若要取得對等上定義之所有對等體身份的枚舉清單,請呼叫 PeerEnumIdentities,這會傳回枚舉的句柄。 若要取得對等體身份,請使用列舉句柄和要擷取的成員數目作為參數,呼叫 PeerGetNextItem。 繼續呼叫 PeerGetNextItem,直到 pCount 參數傳回的值小於所要求的對等身分識別數目。
如果對等端的身分識別不存在,可以呼叫 PeerIdentityCreate來建立。 建立對等端身分識別之後,對等端會產生一個包含分配給該對等端的公鑰的 XML 資料塊。
呼叫peerIdentityGetXML 來取得對等識別資訊。 群組建立者或系統管理員會使用此對等身分識別資訊,以發出加入群組所需的認證,作為邀請 XML Blob。
如需對等身分識別的詳細資訊,請參閱 Identity Manager API 檔
啟動對等群組基礎結構
在應用程式呼叫對等群組 API 中的任何函式之前,必須先呼叫peerGroupStartup。 此函式會初始化應用程式的對等群組基礎結構,並設定支援的版本。
取得群組句柄
若要連線到群組並開始參與,必須取得對等群組的控制代碼。 下列清單會識別連線至對等群組的三種方式:
- 藉由呼叫 PeerGroupCreate來建立對等群組,這將初始化新的對等群組,並返回有效的控制代碼,該代碼以對等節點作為擁有者和唯一系統管理員。
- 藉由呼叫peerGroupJoin 來加入對等群組。 若要加入點對點群組,成員必須收到來自點對點群組管理員的邀請。 若要取得邀請,請將身分識別資訊 XML Blob 傳送給建立邀請並透過外部機制傳送給您的系統管理員,例如電子郵件或 FTP。 邀請和對等身分識別會傳遞至 PeerGroupJoin,它會將有效的句柄傳回給群組。
- 藉由呼叫 PeerGroupOpen,開啟某個對等先前已加入的對等群組。 在此情況下,不需要取得邀請。
從上述其中一個函式取得有效的對等群組句柄之後,您可以使用新的句柄呼叫 PeerGroupConnect,以聯機到對等群組。
注意
如果連接到對等群組失敗,則會發生 PEER_GROUP_EVENT_CONNECTION_FAILED 事件。 處理程序可以嘗試重新建立對等群組的連接。
註冊同儕分組活動
在成員參與同儕群組之前,必須註冊參加群組活動。 若要註冊特定對等事件,請呼叫 PeerGroupRegisterEvent,並傳入PEER_GROUP_EVENT_TYPE中定義的一或多個對等事件類型。 您必須註冊套用至應用程式的每個對等事件;例如,若要透過直接連線接收數據,請註冊PEER_GROUP_EVENT_DIRECT_CONNECTION和PEER_GROUP_EVENT_INCOMING_DATA事件。 每個呼叫都會接收一個事件句柄,並傳回該用戶端事件的 HPEEREVENT 句柄。
事件處理程式可以將句柄傳遞給已註冊的對等事件,以 PeerGroupGetEventData取得與對等事件相關聯的數據。 這個同儕事件資料會用 PEER_GROUP_EVENT_DATA 聯合體形式傳回。 如果對等事件佇列是空的,此函式會傳回PEER_S_NO_EVENT_DATA。
您可以呼叫 PeerGroupUnregisterEvent,並提供您想要取消註冊的對等事件的句柄。 呼叫函式之後,與操作代碼相關聯的對等事件將不再註冊。
建立管理者和使用者角色
建立對等群組的對等者稱為對等群組建立者,且預設具有系統管理員角色。 只有對等群組建立者可以設定群組屬性。
同儕受邀加入同儕群組後,可以成為系統管理員或成員。 如果他們被發出邀請的系統管理員指派系統管理員角色,他們可以邀請新成員加入對等群組,並同樣地將系統管理員角色指派給其他成員。
對等群組成員的角色是在系統管理員提供給成員的邀請中設定。 若要新增更多系統管理員,請在建立邀請時,將peerGroupCreateInvitationpRoles參數的值設定為PEER_GROUP_ROLE_ADMIN。
成員可以參與對等群組,但無法邀請和授權新成員、設定群組屬性,或更新或刪除他們未特別建立的群組記錄。 若要將成員狀態指派給參加的對等節點,當您為該對等節點建立邀請時,請將 PeerGroupCreateInvitation 的 pRoles 參數的值設定為 PEER_GROUP_ROLE_MEMBER。
若要變更成員的角色,必須核發包含新角色的新認證給該成員。 若要達成此目的,請從 PeerGroupEnumMembers所傳回的 PEER_MEMBER 結構中取得該成員的 PEER_CREDENTIAL_INFO 結構。 將 PEER_CREDENTIAL_INFO 中的 pRoles 字段變更為新的角色,並將結構傳遞至 PeerGroupIssueCredentials。
新的憑證必須連接到對等群組後才會生效。 如果它們目前已連線,則必須關閉群組並重新連線以取得更新的認證。
尋找對等
若要取得參與對等群組之所有對等的枚舉清單,請使用群組句柄呼叫 PeerGroupEnumMembers,以傳回枚舉的句柄。 若要取得成員,請使用列舉句柄和要擷取的成員數目,呼叫 PeerGetNextItem。 繼續呼叫 PeerGetNextItem,直到 pCount 參數傳回一個小於所要求成員數目的值為止。 請注意,可能無法傳回可用成員的完整清單。
每個成員都會以 PEER_MEMBER 結構表示,其中包含作用中對等方的身分、節點 ID 和 IP 位址。
完成後,呼叫peerEndEnumeration 來關閉列舉並釋放相關聯的記憶體。
直接連線至對等
當一個對等節點連線至對等群組時,可通過呼叫 PeerGroupOpenDirectConnection ,並提供另一個對等節點的身份,來起始與其他連線成員的直接一對一交換。 此呼叫為異步,並傳回 64 位聯機標識碼。 如果呼叫成功,您會收到PEER_GROUP_EVENT_DIRECT_CONNECTION_EVENT對等事件,表示連線成功。 如果連線成功,連線標識碼有效,而且可用來透過直接連線來傳送和接收數據。
為了能接收直接連線,其他對等者也必須事先註冊PEER_GROUP_EVENT_DIRECT_CONNECTION對等事件。
若要將數據傳送至對等,請使用有效的連線標識符呼叫 PeerGroupSendData。 若要接收數據,其他對等節點必須註冊PEER_GROUP_EVENT_INCOMING_DATA對等事件。 同樣地,如果傳送的對等想要接著接收數據,也必須註冊PEER_GROUP_EVENT_INCOMING_DATA對等事件。
若要接收群組中其他對等目前作用中的直接連線總數集,請呼叫 PeerGroupEnumConnections 以開啟列舉,並使用 PeerGetNextItem逐一查看連線清單。
若要關閉直接連線,請呼叫 PeerGroupCloseDirectConnection 並傳入連線標識碼。
關閉和停止對等群組
若要關閉對等群組的連線,請呼叫 PeerGroupClose,這會使群組句柄失效,但不會關閉對等群組基礎結構。 透過呼叫 PeerGroupDelete來刪除點對點群組數據。
當應用程式完成使用對等群組基礎結構時,它必須呼叫 PeerGroupShutdown 。