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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

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

Регистрация: Jan 2011
Сообщений: 247
По умолчанию прослушка сокета в цикле

собственно сразу код :
Код AS3:
trace("start _child_arrC: "+_child_arrC.length);
				if(station_type=="income"){
					for (var i:Number=0; i < _child_arrC.length; i++) {
						var json_data:Object = new Object();
						json_data.method = "setEndToAction";
						json_data.params = {validation_key: v_key,stationId:int(_child_arrC.getItemAt(i).stationId),professionId:int(_child_arrC.getItemAt(i).professionId),userId:int(_child_arrC.getItemAt(i).UID),amount:int(_child_arrC.getItemAt(i).amount)};
						trace(JSONN.encode(json_data));
						socket.writeUTFBytes(JSONN.encode(json_data));
						socket.flush();
					}
					_child_arrC.removeAll();
					trace("end _child_arrC: "+_child_arrC.length);
				}
В принципе все работает, но нужно как-то остановить цикл ,подождать пока сервер ответить и когда ответил крутануть следующую і++.
На деле выходит так что я со скоростью автомата на сервер даю три запроса и когда цикл отработал свое сервер мне дает ответ только на самый первый запрос остальные игноряться.
в идеале конечно было бы еще как-то реализовать если сервер не отвечает то повторить ему еще раз запрос, ну это уже только бонус к основному вопросу) он не сильно важен сейчас )

Старый 21.11.2013, 21:49
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Почему бы все за раз не послать? Мне непонятно, зачем намернно бить-дробить отсылаемые данные на несколько запросов в вашем случае.

Старый 21.11.2013, 22:15
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 3  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от alexcon314 Посмотреть сообщение
Почему бы все за раз не послать?
как ?)
а вообще я так понял вопрос актуальный я много видел вопросов в инете подобных без ответов...

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
как ?)
Что как? Поместить все нужные данные в массив, его сериализовать в джейсон и отрпавить за раз
Цитата:
но нужно как-то остановить цикл ,подождать пока сервер ответить и когда ответил крутануть следующую і++.
В ас3 это невозможно. Он не многопоточен, и такая "остановка" одного цикла приведет к остановке всей программы

Старый 21.11.2013, 23:49
C4Grey вне форума Посмотреть профиль Отправить личное сообщение для C4Grey Найти все сообщения от C4Grey
  № 5  
Ответить с цитированием
C4Grey

Регистрация: May 2007
Сообщений: 181
Отправить сообщение для C4Grey с помощью ICQ Отправить сообщение для C4Grey с помощью Skype™
Отправлять сообщение, ждать ProgressEvent.SOCKET_DATA после отправлять следующее - это если важна очередность отправки. Можно таким образом организовать стек сообщений, можно каждому сообщению добавить UID, для проверки ответа от сервера. Кода приема сообщений нету(также как и кода сервера, отвечающего за их отправку), потому сложно сказать почему клиент получает только одно сообщение. Что касается проверки "сервер не отвечает" - после зкарытия серверного сокета Flash вызовет событие Event.CLOSE у сокета, то же справедливо и для обрыва соединения на стороне клиента. Конечно, никто не мешает пинговать клиентов с определенным интервалом, и проверять время пинга на клиенте - если больше определенного - закрывать подключение и уведомлять об ошибке. Все остальное, что не касается разрыва соединения(падение сервера вследствие утечек памяти, ошибки в логике обработки сообщений, и т.п.) относится к багам, IMHO, и это нужно чинить в коде, а не городить вокруг костыли.

Старый 22.11.2013, 08:55
bifidokk вне форума Посмотреть профиль Отправить личное сообщение для bifidokk Найти все сообщения от bifidokk
  № 6  
Ответить с цитированием
bifidokk
 
Аватар для bifidokk

Регистрация: Jan 2011
Сообщений: 200
Цитата:
Сообщение от GrafMine Посмотреть сообщение
как ?)
а вообще я так понял вопрос актуальный я много видел вопросов в инете подобных без ответов...
и я спрошу, зачем это делать?)
если сервер не успевает что-то там обработать, то нужно там стек организовывать. или менять серверный движок

Старый 22.11.2013, 16:23
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 7  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Проблема была решена другим путем, ну все равно каждого по отдельности.
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Что как? Поместить все нужные данные в массив, его сериализовать в джейсон и отрпавить за раз
Как сделать например с моим примером - 3 раза запихнуть параметры в массив потом его сериализовать в джейсон и отправить ? я как только не извращался одни матюки дебаг пишет ) и в инете написано только как запрос в массив преобразовать а массив уже протрейсить, а вот обратное действие что-то сложно понимаеться.

Старый 22.11.2013, 17:27
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 8  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Типа вот так, не?
Код AS3:
if(station_type=="income"){
	var json_data:Object = new Object();
	json_data.method = "setEndToActionForChilds";// метод, принимающий массив объектов
	var params:Array = new Array();//собственно, сам массив
	for (var i:Number=0; i < _child_arrC.length; i++) {
		params.push({validation_key:v_key,stationId:int(_child_arrC.getItemAt(i).stationId),professionId:int(_child_arrC.getItemAt(i).professionId),userId:int(_child_arrC.getItemAt(i).UID),amount:int(_child_arrC.getItemAt(i).amount)});
	}
	json_data.params = params;
	socket.writeUTFBytes(JSONN.encode(json_data));
	socket.flush();
	_child_arrC.removeAll();
}
Понятное дело, на сервер придет весь массив из трех объектов сразу, там нужно будет его соответственно обработать. Т.е. можно действие setEndToAction применить ко всем объектам в отправленном массиве, например.

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

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от alexcon314 Посмотреть сообщение
Типа вот так, не?
Код AS3:
if(station_type=="income"){
	var json_data:Object = new Object();
	json_data.method = "setEndToActionForChilds";// метод, принимающий массив объектов
	var params:Array = new Array();//собственно, сам массив
	for (var i:Number=0; i < _child_arrC.length; i++) {
		params.push({validation_key:v_key,stationId:int(_child_arrC.getItemAt(i).stationId),professionId:int(_child_arrC.getItemAt(i).professionId),userId:int(_child_arrC.getItemAt(i).UID),amount:int(_child_arrC.getItemAt(i).amount)});
	}
	json_data.params = params;
	socket.writeUTFBytes(JSONN.encode(json_data));
	socket.flush();
	_child_arrC.removeAll();
}
Понятное дело, на сервер придет весь массив из трех объектов сразу, там нужно будет его соответственно обработать. Т.е. можно действие setEndToAction применить ко всем объектам в отправленном массиве, например.
Большое спасибо, действительно все оказалось проще некуда )

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

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

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


 


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


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