|
|
|||||
Регистрация: Mar 2011
Сообщений: 40
|
Передача данных p2p
доброго времени суток, уважаемые форумчане, недавно нашел несколько примеров создания чатов на флеше с использованием технологии RTMFP и p2p. Собс-но примеры для чатов были хорошими, и я решил немного углубится в эту тему. Вот код
public class main extends MovieClip { var response:String; var s:Socket; var p2p:p2pConnect= new p2pConnect(); var Rpack,Spack:Object; var Rp:ByteArray; var r,r2:round; var i=false; var c:Controls = new Controls(stage); var nc:NetConnection; public function main() { nc = new NetConnection(); //nc.addEventListener(NetStatusEvent.NET_STATUS, rtmfpHandler); nc.connect("rtmfp://p2p.rtmfp.net/" + "*****************************"); connect_btn.addEventListener(MouseEvent.CLICK, createConnect); addEventListener(Event.ENTER_FRAME,lookConnect); // constructor code } function createConnect (e:MouseEvent) { addChild(p2p); } function lookConnect (e:Event) { if(p2p.Status=="Connected"){ connect_btn.removeEventListener(MouseEvent.CLICK, createConnect); removeEventListener(Event.ENTER_FRAME,lookConnect); netPlay(); } } function netPlay () { gotoAndStop(2); r=createRound (Math.random()*540,Math.random()*390); addChild(r); addEventListener(Event.ENTER_FRAME,readP2Packs) p2p.sendP2Package(createP2Packs(r)); addEventListener(Event.ENTER_FRAME,moveO); } function moveO (e:Event) { if(c.forward){r.y-=1;p2p.sendP2Package(createP2Packs(r)); }; if(c.back){r.y+=1;p2p.sendP2Package(createP2Packs(r)); }; if(c.lft){r.x-=1;p2p.sendP2Package(createP2Packs(r)); }; if(c.rght){r.x+=1;p2p.sendP2Package(createP2Packs(r)); }; } function sendP2Packs(e:TimerEvent) { p2p.sendP2Package(createP2Packs(r)) } function readP2Packs(e:Event) { Rpack=p2p.readP2Pakcage(); Rpack.pack.position=0; if(!i){r2=createRound(Rpack.pack.readInt(),Rpack.y);addChild(r2);i=true}else{ r2.x=Rpack.pack.readInt(); r2.y=Rpack.pack.readInt()} tt.text=(r2.x+" "+r2.y); } function createP2Packs(r:round):Object { var ba:ByteArray = new ByteArray(); ba.writeInt(int(r.x)); ba.writeInt(int(r.y)); var o:Object = new Object(); o.pack=ba; return o; } function createRound (X:Number,Y:Number):round { var ro=new round(); ro.x=X; ro.y=Y; return ro; } } |
|
|||||
вы шлете данные по сети. Задержки неизбежны
|
|
|||||
Регистрация: Mar 2011
Сообщений: 40
|
это понятно, я спрашивал есть ли какие-нить способы минимизировать задержки?
|
|
|||||
Регистрация: Mar 2010
Сообщений: 48
|
есть вероятность, что из-за Rpack=p2p.readP2Pakcage(); происходят задержки
общение нужно сделать асинхронным уменьшить объем передаваемых данных (за счет удаления лишних данных, например когда круг неподвижен или имеет постоянную скорость) |
|
|||||
Регистрация: Mar 2011
Сообщений: 40
|
а поподробней можно насчет асинхронности?
сама функция |
|
|||||
Регистрация: Nov 2010
Сообщений: 1
|
Лучше организовать через сокет, мое мнение
|
|
|||||
спрашиваете про оптимизацию п2п, а сам класс отвечающий за п2п не включаете...
|
|
|||||
Регистрация: Sep 2010
Сообщений: 81
|
А почему не задействован нигде netGroup? Или тут его не видно? И почему не шлете данные через поток NetStream.send() ??? Это весь код? Через поток задержек невидно вообще. Я запускал 16 флешек одновременно - всё нормально, без задержек...
|
|
|||||
Я вообще не понимаю как это у вас работает. Из всего, что вы спросили, к p2p из приведенного кода относится лишь nc который вы никак не используете, и некий загадочный p2pConnect, который как я предполагаю создает вообще другое подключение, так как из кода nc вы никуда не передаете. Событий ENTER_FRAME непонятное количество, и более непонятно почему именно этим событием вы постоянно заставляете ваш класс p2pConnect читать некий скорее еще не существующий объект. Пересмотрите логику вашего приложения. Слишком очевидны лишние действия, удаление которых возможно и повлияет на скорость приема/передачи.
|
Часовой пояс GMT +4, время: 10:47. |
|
« Предыдущая тема | Следующая тема » |
|
|