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

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

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

Регистрация: Nov 2003
Сообщений: 290
По умолчанию Вопрос к профи: как лучше организовать многократный опрос сервера?

Друзья, прошу помощи по следующей проблеме - нужно организовать взаимодействие с сервером (отправку/прием данных в xml). По запросу юзера(нажатию кнопочки) Flash-клиент вызывает сценарий PHP, который в ответ отдает ему XML. Запросы пользователи могут делать довольно часто (нажимать кнопочку раз в 0,5-1 сек.), а сервер возвращает довольно большой пакет данных.
Вопрос, собственно, в том, каким образом сбрасывать соединение, если пользователь вызывает новый запрос из флэшки. Т.е. предположим юзер нажал кнопку обновления -> пошел запрос к скрипту script.php -> скрипт отдает данные XML, пакет по медленному (скажем модемному) соединению идет к флэшке... и вдруг пользователь не дождавшись поступления старых данных требует обновления и вновь посылает запрос. Что произойдет с этим недокачанным пакетом? Нужно как-то его сбросить...
На флэше сделано так: создается LoadVars, определяется обработчик onLoad к нему, вызывается load(script.php). Если пользователь делает новый вызов скрипта LoadVars, то убивается (delete LoadVars_obj) и тут же снова создается, опять определяется обработчик onLoad к нему и вызывается load(script.php).
Вопрос в том что при многократном быстром нажатии кнопки "обновить" возникают какие-то задержки (тест на модеме) в получении данных. Сдается мне, что как-то оно глючит... Не может ли быть случайно так, что объект принимает сразу несколько переданных сервером пакетов (т.е. часть старых, вызов которых был инициирован уже удаленной копией объекта)?

Старый 17.05.2006, 16:49
Бармалей вне форума Посмотреть профиль Отправить личное сообщение для Бармалей Посетить домашнюю страницу Бармалей Найти все сообщения от Бармалей
  № 2  
Ответить с цитированием
Бармалей
 
Аватар для Бармалей

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Если ты думаешь обмениваться XML-данными, то LoadVars тут явно не подходит. Для этих целей нужно использовать классы XML или XMLSocket. Второй класс более предпочтителен, так как умеет "держать" соединение, а не инициировать его каждый раз, когда возникает необходимость обмена данными с сервером.
__________________
Garbage Collector || AIR (Apollo) Docs

Старый 17.05.2006, 16:52
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 3  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 290
Ой, ой ой... XML конечно, а не LoadVars Опечатка! Туплю... Сокет не подходит, к сожалению.

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

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Для отбрасывания "устаревших" данных можно попробовать отсылать серверу какой-либо идентификатор (например, номер) соединения, чтобы сервер, увидев что запрашиваются новые данные, когда старые еще не отправлены, заканчивал передачу "старых" данных и начинал передавать новые.
__________________
Garbage Collector || AIR (Apollo) Docs

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

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
А не проще ли заблокировать кнопку обновления до тех пор, пока не получим результат
А вообще неплохо использовать Flash Remoting + php, это продуктивнее, потому из флэша напрямую будешь вызывать php функции и получать результирующий объект, который не надо парсить, как XML. Соответственно будет работать быстрее чем связка Flash<->XML<->php, где мы используем XML как промежуточное звено.
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

Старый 17.05.2006, 17:33
vecalion вне форума Посмотреть профиль Отправить личное сообщение для vecalion Найти все сообщения от vecalion
  № 6  
Ответить с цитированием
vecalion

Регистрация: Jun 2005
Сообщений: 22
Цитата:
Сообщение от Madasan
А вообще неплохо использовать Flash Remoting + php, это продуктивнее, потому из флэша напрямую будешь вызывать php функции и получать результирующий объект, который не надо парсить, как XML. Соответственно будет работать быстрее чем связка Flash<->XML<->php, где мы используем XML как промежуточное звено.
Flash Remoting тоже использует промежуточное звено, однако оно скрыто от нас. Поэтому теоретически скорости сопоставимы. На практике же, всё зависит от Flash<-этого звена->XML<-и этого->php. Хотя обогнать, вылизанные библиотеки вряд ли удасться

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

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Цитата:
Сообщение от vecalion
Flash Remoting тоже использует промежуточное звено, однако оно скрыто от нас. Поэтому теоретически скорости сопоставимы. На практике же, всё зависит от Flash<-этого звена->XML<-и этого->php. Хотя обогнать, вылизанные библиотеки вряд ли удасться
Не похоже на то что сопоставимы, парсинг XML это не серилизация amfphp, вещи разные, если еще учесть, что последнее, то что скрыто от нас проделывается на сервере, и не напрягает флэш. А промежуточные звенья всегда можно найти, флэш плеер например использует возможности браузера для формирования запросов, и это тоже скрыто от нас... Сколько же всего скрыто от наших глаз? Да собственно от любопытного глаза ничего не скроешь...
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

Старый 17.05.2006, 19:36
Madasan вне форума Посмотреть профиль Отправить личное сообщение для Madasan Найти все сообщения от Madasan
  № 8  
Ответить с цитированием
Madasan
 
Аватар для Madasan

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Цитата:
Код:
myLoader:XML = new XML();
myLoader.onLoad = function(){
usage = false;
// здесь действия по обработке
}
myLoader.mySend = function(){
if(usage == true){
return;
}
usage = true
send();
}
Это и есть блокировка обновления, у тебя есть флаг usage. Когда загрузка началась он true, когда закончилась false, и пока оно true новый запрос не посылается. Только я бы задавал false после обработки полученного результата. ТАк, на всякий случай.
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.


Последний раз редактировалось Madasan; 17.05.2006 в 19:38.
Старый 17.05.2006, 17:07
Бармалей вне форума Посмотреть профиль Отправить личное сообщение для Бармалей Посетить домашнюю страницу Бармалей Найти все сообщения от Бармалей
  № 9  
Ответить с цитированием
Бармалей
 
Аватар для Бармалей

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Madasan, а где можно про Flash Remoting информацию достать?
__________________
Garbage Collector || AIR (Apollo) Docs

Старый 17.05.2006, 17:08
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 10  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 290
Данные для всех этих запросов получаются одинаковыми, никаких обновления на сервере за короткий промежуток не происходит. Вопрос в том что
delete XMLObj;
XMLObj = new XML();
XMLObj.load("script.php");

однозначно убивает старый объект XML? невостребованная партия данных не может попасть во вновь созданный XML? (который уже успел отправить новый запрос load)

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

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

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


 


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


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