Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Передача данных p2p (http://www.flasher.ru/forum/showthread.php?t=178476)

CARVILLE 22.04.2012 16:28

Передача данных p2p
 
доброго времени суток, уважаемые форумчане, недавно нашел несколько примеров создания чатов на флеше с использованием технологии RTMFP и p2p. Собс-но примеры для чатов были хорошими, и я решил немного углубится в эту тему. Вот код
Код AS3:

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;
                }
        }

Немного пояснений: две проги конектятся друг к другу, каждая рисует свой кружок, координаты которого передает другой. пользователь с помощью клавиатуры изменяет координаты своего круга (WASD) и прога шлет новые координаты, и т.д. проблемма в том что проходит задержка время между изменением координат в одной и другой программе(где-то 0,5-1с). Собственно вопрос: есть ли какие-то способы уменьшения времени задержки, и лучшей синхронизации действий между приложениями. Если есть какие нить ссылки на инфу по этой теме буду премного благодарен:)

ramshteks 22.04.2012 17:35

вы шлете данные по сети. Задержки неизбежны

CARVILLE 22.04.2012 17:45

это понятно, я спрашивал есть ли какие-нить способы минимизировать задержки?

bublic_bicubic 22.04.2012 17:59

есть вероятность, что из-за Rpack=p2p.readP2Pakcage(); происходят задержки
общение нужно сделать асинхронным
уменьшить объем передаваемых данных (за счет удаления лишних данных, например когда круг неподвижен или имеет постоянную скорость)

CARVILLE 22.04.2012 19:50

а поподробней можно насчет асинхронности?
сама функция
Код AS3:

private var p2pPackage:Object;
public function readP2Pakcage ():* {
                        return p2pPackage;
                }


MigunovAlex 26.04.2012 00:13

Лучше организовать через сокет, мое мнение

dsQuadro 26.04.2012 13:53

спрашиваете про оптимизацию п2п, а сам класс отвечающий за п2п не включаете...

garymar 21.05.2012 12:32

А почему не задействован нигде netGroup? Или тут его не видно? И почему не шлете данные через поток NetStream.send() ??? Это весь код? Через поток задержек невидно вообще. Я запускал 16 флешек одновременно - всё нормально, без задержек...

Партизан 21.05.2012 13:21

Я вообще не понимаю как это у вас работает. Из всего, что вы спросили, к p2p из приведенного кода относится лишь nc который вы никак не используете, и некий загадочный p2pConnect, который как я предполагаю создает вообще другое подключение, так как из кода nc вы никуда не передаете. Событий ENTER_FRAME непонятное количество, и более непонятно почему именно этим событием вы постоянно заставляете ваш класс p2pConnect читать некий скорее еще не существующий объект. Пересмотрите логику вашего приложения. Слишком очевидны лишние действия, удаление которых возможно и повлияет на скорость приема/передачи.


Часовой пояс GMT +4, время: 15:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.