![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
доброе время суток.
прочитал статью http://habrahabr.ru/post/130526/. Я в экшнскрипте новичок, поэтому все что понял от туда это то, что реализуется передача видео не через сервер, а напрямую между пользователями. скажите и желательно дайте ссылки почитать - можно ли использовать данный метод в качестве браузерного приложения для передачи простых json-массивов или простейших текстовых сообщений напрямую между пользователями? заранее спасибо! Последний раз редактировалось syegorius; 17.04.2012 в 03:54. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
Можно использовать данный метод для создания realtime игры ![]() |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
а можно по подробней?
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
|
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
спасибо за ссылку, хотя вообще-то парень рассказывает про класс P2PGame, исходников которого нет, а есть только swc и ломай голову как оттуда достать код, а хотя именно в этом классе как раз то, что мне нужно. тем не менее пошатался и нашел у него же небольшой туториал http://www.flashrealtime.com/basics-of-p2p-in-flash/. все понятно и даже у меня самого получилось.
в итоге начал переделывать то, что у него под себя и сразу же возникло несколько вопроса (огромная просьба не игнорировать их и помочь разобраться, как никак тема интересная, а нормальной доходчивой информации нетак уж и много): вот то что я сделал из того что было в туториале: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="0" height="0" creationComplete="js()" layout="absolute"> <mx:Script> <![CDATA[ import flash.external.*; private const SERVER_ADDRESS:String = "rtmfp://p2p.rtmfp.net/850ecff774ce98e0c0c765f3-29ce3314ba14/"; private var nc:NetConnection; private var myPeerID:String; private var farPeerID:String; private var sendStream:NetStream; private var recvStream:NetStream; private function initConnection():void{ nc = new NetConnection(); nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatus); nc.connect(SERVER_ADDRESS); } private function ncStatus(event:NetStatusEvent):void{ myPeerID = nc.nearID; //getting current user id var res:String = ExternalInterface.call("ncStatus",myPeerID); } private function setFarPeerID(jsFarPeerID:String):void{ farPeerID = jsFarPeerID; //setting remote user id } private function initSendStream(jsFarPeerID:String):void{ setFarPeerID(jsFarPeerID); sendStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS); sendStream.publish("media"); var sendStreamClient:Object = new Object(); sendStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{ farPeerID = callerns.farID; return true; } sendStream.client = sendStreamClient; } private function initReceiveStream(jsFarPeerID:String):void{ setFarPeerID(jsFarPeerID); recvStream = new NetStream(nc,farPeerID); recvStream.play("media"); recvStream.client = this; } public function receiveSomeData(str:String):void{ var res:String = ExternalInterface.call("receiveSomeData",str); } private function sendSomeData(str:String):void{ sendStream.send("receiveSomeData",str); } public function jsInitConnection():void{ ExternalInterface.addCallback("initConnection",initConnection); } public function jsInitSendStream():void{ ExternalInterface.addCallback("initSendStream",initSendStream); } public function jsInitReceiveStream():void{ ExternalInterface.addCallback("initReceiveStream",initReceiveStream); } public function jsSetFarPeerID():void{ ExternalInterface.addCallback("setFarPeerID",setFarPeerID); } public function jsSendSomeData():void{ ExternalInterface.addCallback("sendSomeData",sendSomeData); } public function js():void{ jsInitConnection(); jsInitSendStream(); jsInitReceiveStream(); jsSetFarPeerID(); jsSendSomeData(); } ]]> </mx:Script> </mx:Application> первый вопрос: в туториале был показан пример в котором клиент может получить информацию только от одного клиента и точно также может передать информацию только одному клиенту. естественно так как обо всем выше перечисленном я узнал только на днях в моей версии так же клиент может получить информацию только от одного клиента и обратно. в ссылке предыдущего поста как раз речь идет о том чтобы получать инфо не от одного, а от нескольких пользователей, но так как код нужного класса не посмотреть прошу помощи у вас - как в этих двух функциях заменить farPeerID на койлибо мультиID или массив или вообщем не знаю что еще можно придумать:
пока ищу решение проблемы попробовал просто написать: <object id="p2p" type="application/x-shockwave-flash" data="myfile.swf">
<embed name='p2p' src='p2p2.swf' />
</object>
в фаербаге написало: "Элемент доступен по идентификатору/имени в глобальной области видимости. Используйте вместо этого соответствующий стандарту W3C метод document.getElementById()." попробовал: в фаербаге написало: "p2p.initConnection is not a function" и еще много чего пробовал но так ничего и не вызвалось... что не так? третий вопрос: в своей переделке я использую import flash.external.ExternalInterface; и похоже из-за этого приложение раздуло с 50кб аж до 278кб или не из-за этого? что так сильно может придавать вес приложению? четвертый вопрос: в функции initConnection() каждое приложение получает свой уникальный id. как долго этот id действителен? пятый вопрос: сегодня где-то наткнутся на информацию, что данные передаются по протоколу udp или по какому-то производному от него протоколу, который блокируются многими фаерволами. как часто такое случается и что делать в таких случаях? можно ли каким-то образом это обойти? все что предполагается передавать между клиентами это небольшие json-массивы весом не более 1кб. заранее спасибо за ответы! Последний раз редактировалось syegorius; 18.04.2012 в 05:21. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Ой, я в этом не разбираюсь
![]() Попробуй сделать поменять это: На это: И спрячь свой код девелопера! |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
по поводу второго вопроса - только что наконец-то получилось запустить функцию, правда довольно страннім способом:
т.е. как вы видите все начинает работать только через какое-то время... никто не в курсе почему? |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|