Adobe Cirrus: самый быстрый способ доставить кусок данных одному узлу с известным идентификатором - PullRequest
3 голосов
/ 17 июня 2011

Adobe Cirrus предлагает ряд опций для передачи данных от однорангового узла: направленная маршрутизация, репликация объектов и многоадресная передача, чтобы назвать несколько.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

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/

1 голос
/ 17 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...