Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2012, 16:28
CARVILLE вне форума Посмотреть профиль Отправить личное сообщение для CARVILLE Найти все сообщения от CARVILLE
  № 1  
Ответить с цитированием
CARVILLE

Регистрация: Mar 2011
Сообщений: 40
Question Передача данных 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с). Собственно вопрос: есть ли какие-то способы уменьшения времени задержки, и лучшей синхронизации действий между приложениями. Если есть какие нить ссылки на инфу по этой теме буду премного благодарен

Старый 22.04.2012, 17:35
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 2  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
вы шлете данные по сети. Задержки неизбежны

Старый 22.04.2012, 17:45
CARVILLE вне форума Посмотреть профиль Отправить личное сообщение для CARVILLE Найти все сообщения от CARVILLE
  № 3  
Ответить с цитированием
CARVILLE

Регистрация: Mar 2011
Сообщений: 40
это понятно, я спрашивал есть ли какие-нить способы минимизировать задержки?

Старый 22.04.2012, 17:59
bublic_bicubic вне форума Посмотреть профиль Отправить личное сообщение для bublic_bicubic Найти все сообщения от bublic_bicubic
  № 4  
Ответить с цитированием
bublic_bicubic
 
Аватар для bublic_bicubic

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

Старый 22.04.2012, 19:50
CARVILLE вне форума Посмотреть профиль Отправить личное сообщение для CARVILLE Найти все сообщения от CARVILLE
  № 5  
Ответить с цитированием
CARVILLE

Регистрация: Mar 2011
Сообщений: 40
а поподробней можно насчет асинхронности?
сама функция
Код AS3:
private var p2pPackage:Object;
public function readP2Pakcage ():* {
			return p2pPackage;
		}

Старый 26.04.2012, 00:13
MigunovAlex вне форума Посмотреть профиль Отправить личное сообщение для MigunovAlex Найти все сообщения от MigunovAlex
  № 6  
Ответить с цитированием
MigunovAlex

Регистрация: Nov 2010
Сообщений: 1
Лучше организовать через сокет, мое мнение

Старый 26.04.2012, 13:53
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 7  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
спрашиваете про оптимизацию п2п, а сам класс отвечающий за п2п не включаете...

Старый 21.05.2012, 12:32
garymar вне форума Посмотреть профиль Отправить личное сообщение для garymar Найти все сообщения от garymar
  № 8  
Ответить с цитированием
garymar

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

Старый 21.05.2012, 13:21
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 9  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Я вообще не понимаю как это у вас работает. Из всего, что вы спросили, к p2p из приведенного кода относится лишь nc который вы никак не используете, и некий загадочный p2pConnect, который как я предполагаю создает вообще другое подключение, так как из кода nc вы никуда не передаете. Событий ENTER_FRAME непонятное количество, и более непонятно почему именно этим событием вы постоянно заставляете ваш класс p2pConnect читать некий скорее еще не существующий объект. Пересмотрите логику вашего приложения. Слишком очевидны лишние действия, удаление которых возможно и повлияет на скорость приема/передачи.

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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