Поделиться через


Подключение к одноранговой группе

В этом разделе описывается, как приложение подключается к одноранговой группе с помощью API одноранговой группировки.

Присоединение к одноранговой группе

Чтобы присоединиться к группе одноранговых узлов, вызовите PeerGroupJoin, передав имя удостоверения однорангового узла и приглашение (и необязательное имя облака PNRP, если имя облака в приглашении неоднозначно).

В случае успешного выполнения PeerGroupJoin возвращает дескриптор одноранговой группе.

Если одноранговый узел ранее присоединился к группе одноранговых узлов, а затем закрыл дескриптор, группа одноранговых узлов должна быть повторно открыта, вызвав PeerGroupOpen и передав имя группы одноранговых узлов. Этот вызов возвращает новый дескриптор группы одноранговых узлов.

После успешного присоединения одноранговой группы одноранговый узел может подключиться непосредственно к группе одноранговых узлов и начать взаимодействие, вызвав PeerGroupConnect. После подключения одноранговый узел считается подключенным.

Если приложение не будет взаимодействовать с группой в то время, оно может оставаться в автономном режиме. Если он решит участвовать непосредственно в группе одноранговых узлов на более позднем этапе, последующий вызов PeerGroupConnect переведет его в режим "в сети". После присоединения однорангового узла к одноранговой группе он должен подключиться по крайней мере один раз, прежде чем он сможет публиковать записи в одноранговой группе.

Открытие одноранговой группы без подключения (в автономном режиме)

Часто может потребоваться, чтобы приложение подключалось к одноранговой группе, но не участвовало в ней напрямую, получая и публикуя обновления записей, но не отправляя или получая сообщения данных. Приложение находится в этом состоянии "вне сети" сразу после вызова PeerGroupCreate, PeerGroupJoin или PeerGroupOpen .

Автономное приложение может в любое время подключиться к сети, вызвав PeerGroupConnect. После подключения одноранговая группа не может перейти в автономный режим, пока все другие приложения, связанные с этим удостоверением и совместно использующие эту группу, также не будут закрыты к ней.

Одноранговая группа — это общий ресурс с одной и той же группой одноранговых узлов, доступной для нескольких приложений. Если несколько приложений для одного удостоверения и пользователя Windows используют одну и ту же группу одноранговых узлов, они также используют одну и ту же базовую базу данных и подключения (соседские и прямые). Если одно из этих приложений вызывает PeerGroupConnect, все остальные приложения для этого удостоверения или пользователя, участвующего в группе, также подключаются к группе. Если запись добавляется одним приложением, пока группа находится в автономном режиме, другие приложения также смогут видеть ее. В результате приложение должно быть готово к работе в сети в любое время.

Подключение к одноранговой группе (в сети)

Чтобы начать участие в группе, вызовите PeerGroupConnect после создания, присоединения или открытия группы. В этом состоянии прямые подключения можно открыть с другими одноранговыми узлами, участвующими в той же группе, вызвав PeerGroupOpenDirectConnection.

Чтобы определить, не удалось ли выполнить попытку подключения, зарегистрируйтесь для получения события PEER_GROUP_EVENT_CONNECTION_FAILED. Это событие возникает, если инфраструктуре группирования не удается найти другого члена для подключения или если соединение завершается сбоем до синхронизации базы данных группы и не удается установить другое соединение.

Хотя несколько приложений, выполняющихся на одноранговом узле и участвующих в одной группе с одним удостоверением однорангового узла, могут находиться в автономном режиме, вызов PeerGroupConnect любым из приложений приводит к тому, что все приложения становятся подключенными.

Кроме того, если одно приложение на одноранговом узле подключилось к группе, все другие приложения, вызывающие PeerGroupJoin или PeerGroupOpen , также подключаются немедленно. Если приложение вызывает PeerGroupClose, дескриптор закрывается только для этого приложения. Таким образом, последующий вызов PeerGroupOpen приложением возвращает новый дескриптор группы, и приложение немедленно подключается к сети, если другие приложения, участвующие в той же группе, по-прежнему подключены.

Отправка и получение данных

Для отправки и получения данных между определенными узлами-членами в группе необходимо установить прямые соединения с теми участниками, с которыми вы планируете взаимодействовать. Установка прямого соединения — это асинхронный вызов PeerGroupOpenDirectConnection, который передает дескриптор для подключенной группы, а также удостоверение однорангового узла в группе, к которой вы хотите подключиться. Этот метод возвращает идентификатор подключения. Если вызов выполнен успешно, на одноранговом узле возникает событие PEER_GROUP_EVENT_DIRECT_CONNECTION, проверяющее идентификатор подключения.

Чтобы получить прямые подключения от других сетевых одноранговых узлов, зарегистрируйтесь для события PEER_GROUP_EVENT_DIRECT_CONNECTION с помощью вызова PeerGroupRegisterEvent.

После успешного установления прямого подключения приложение может начать отправку данных с вызовами PeerGroupSendData, передав действительный идентификатор подключения. Порядок передачи многокомпонентных данных обрабатывается PeerGroupSendData. Однако приложения должны реализовывать правильный стек протоколов для обработки непрозрачных данных, возвращаемых этим вызовом API.

Чтобы получать данные через прямое подключение, приложение должно зарегистрировать событие PEER_GROUP_EVENT_INCOMING_DATA в PeerGroupRegisterEvent. Обработчик событий отвечает за получение и упорядочение непрозрачных данных, а также за передачу их приложению. Эти данные получаются в обработчике событий путем вызова PeerGroupGetEventData с дескриптором зарегистрированных событий.

Прямое соединение закрывается путем вызова PeerGroupCloseDirectConnection и передачи идентификатора подключения, полученного при предыдущем вызове PeerGroupOpenDirectConnection или полученного в данных события для PEER_EVENT_GROUP_DIRECT_CONNECTION.