2011-06-17 3 views
3

Adobe Cirrus предлагает ряд опций для передачи данных от однорангового узла: Directed Routing, Object Replication и Multicast, чтобы назвать несколько.Adobe Cirrus: быстрый способ доставить кусок данных одному одноранговому узлу с известным идентификатором

Я просто хочу отправить данные одному конкретному партнеру, его штраф за других сверстников «видеть» его в пути.

Мои эксперименты с Directed Routing (очевидный ответ) не прошли хорошо. все методы sendto ... не работают, а NetGroup.post отлично работает в одной и той же netgroup. Меня беспокоит использование прямых соединений из-за надежности.

Кто-нибудь успешно реализовал одну-одну стратегию обмена сообщениями (не один для многих), которая может все еще передавать сообщения между несвязанными одноранговыми узлами - (Directed Routing) или успешно решить эту проблему?

Я рассматриваю различные обходные пути, но я совершенно озадачен, что эти NetGroup методы: sendToNearest, sendToNeighbour & sendToAllNeighbours только, кажется, не в состоянии, без видимых причин.

ответ

1

Ну, вот ваша проблема, NetGroup не создан для одноранговой отправки. Поскольку в документации указано, что «экземпляры класса NetGroup представляют членство в группе RTMFP», и все эти методы отправки относятся к соседям протокола (вам нужно больше узнать, как работает RTMFP, это действительно изобретательный децентрализованный протокол p2p).

Ваш единственный жизнеспособный вариант - использовать прямое соединение, и он так же надежен, как и использование NetGroup. Единственная проблема «надежности» связана с подключением к одноранговой сети. Если вы хотите что-то более надежное, вам понадобится сторонний сервер, но по моему опыту это не нужно. Вам просто нужно, чтобы клиент слушал входящий поток, а другой подключался к другому одноранговому узлу, используя свой идентификатор peer (вы уже должны знать идентификатор peer через собственную реализацию сервера). Когда соединение установлено, вам просто нужно сделать netConnection.send('whatever');.

+0

Я был под впечатлением, что прямые соединения не были возможны между всеми членами группы, и направленной маршрутизации с использованием сетевая_группа было решение обмена сообщениями между такими парами пэров , – Tom

+0

Что вы подразумеваете под «всеми членами группы»? Разве вы просто не хотите сообщить одному человеку? Направленная маршрутизация предназначена для того, чтобы вы отправляли информацию своим соседям протокола, но из того, что я прочитал, если этот человек не является вашим соседом, то вы не можете отправить им какую-либо информацию напрямую. –

+0

Извините, я думал, что это может быть не на 100% понятным. Я имел в виду: по моему мнению, прямые соединения не всегда возможны между всеми возможными парами сверстников в группе, хотя обмен сообщениями между такими сверстниками возможен. – Tom

2

netGroup.sendToNearest должен быть самым быстрым, но для его выполнения требуется немного больше работы. Для обработки сообщения необходимо прослушать событие NetGroup.SendTo.Notify. Тем не менее, возможно, что вы можете получить сообщение, но НЕ быть конечным пунктом для него ... другими словами, вы могли бы просто быть средним человеком в сети P2P, и ему нужно переслать сообщение на ближайшую узел. Таким образом, при обработке события NetGroup.SendTo.Notify вам необходимо проверить, первым ли вы первым. Вы делаете это, проверяя event.info.fromLocal. Если это правда, вы последний пункт назначения, и вы должны делать все, что хотите. Если это ложь, вы должны должны принять активное участие в пересылке сообщения вперед. Чтобы переслать сообщение, вам нужно знать, что такое идентификатор конечного адресата, поэтому вам нужно будет включить его в исходное сообщение. Вы можете переслать сообщение с чем-то вроде ...

if (!event.info.fromLocal) 
    netGroup.sendToNearest(event.info.message, event.info.message.destination) 

Из того, что я понимаю, направленная маршрутизация должна быть в основном с той же скоростью проводки, но не засоряют сеть с ненужными данными, идущими на всех, когда им это действительно не нужно. Кроме того, направленная маршрутизация происходит через UDP и должна иметь те же ошибки, что и проводка - доставка НЕ ​​гарантируется. Единственный способ гарантировать доставку через RTMFP - это использование репликации объектов.

Вот еще информация о направленной маршрутизации: http://www.flashrealtime.com/directed-routing-explained-flash-p2p/