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

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

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

Регистрация: May 2009
Сообщений: 8
По умолчанию Синхронный обмен клиент-сервер

Всем привет. Ситуация такая: Использую связку
Java + BlazeDS + Flex, все работает прекрасно, но появилась новая задача:
нужно на клиенте выполнить проверку, которую может сделать только сервер.
А именно проверка добавляемой пользователем строки в таблицу на уникальность полей.

Как осуществить проверку когда все запросы на сервер асинхронные? Как остановить выполнение программы до получения ответа от сервера?

выполнять нужное действие в обработчике события result объекта не вариант, потому что это сильно усложняет код, когда процедура добавления строки по сути своей линейна разносить ее на части ради одной проверки очень некрасиво.

Старый 24.05.2009, 00:12
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 2  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
Синхронный запрос на сервер - пока не реализуем. Смотрите другие варианты

Старый 24.05.2009, 02:20
bmikle вне форума Посмотреть профиль Отправить личное сообщение для bmikle Найти все сообщения от bmikle
  № 3  
Ответить с цитированием
bmikle

Регистрация: May 2009
Сообщений: 8
С этим уже смирился..
можно я приведу ужасный код а вы мне скажите что здесь можно поправить?


Код AS3:
 
<mx:RemoteObject id="balanceService" destination="balanceService" result="test()"/>
 
var res = false;
private function test:void
{
	res = true;
}
 
private function main():void
{
       ....
       balanceService.getTest();
       while (!res);
       ................
}
в этом случае будет выполняться цикл пока не придет ответ. Я ПРЕКРАСНО ПОНИМАЮ что это бред и так писать нельзя, но в некоторых языках есть методы реализующие то же самое только коректно, например управление потоками в C#. Не помню точно как но там можно написать что то вроде
Thread.wait(res) - идея такая.
Возможно ли подобным образом организовать остановку выполения во флексе?

Старый 24.05.2009, 10:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Нет, нельзя, AVM работает в одном потоке.

Старый 24.05.2009, 11:56
bmikle вне форума Посмотреть профиль Отправить личное сообщение для bmikle Найти все сообщения от bmikle
  № 5  
Ответить с цитированием
bmikle

Регистрация: May 2009
Сообщений: 8
Спасибо А другие типы взаимодействия клиент-сервер?
Web-service, ... (больше не знаю)
Они все асинхронные?

Старый 24.05.2009, 12:02
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от bmikle Посмотреть сообщение
Они все асинхронные?
Без исключения.

Старый 24.05.2009, 15:58
bmikle вне форума Посмотреть профиль Отправить личное сообщение для bmikle Найти все сообщения от bmikle
  № 7  
Ответить с цитированием
bmikle

Регистрация: May 2009
Сообщений: 8
Большое спасибо, вопрос исчерпан

Старый 25.05.2009, 03:41
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 8  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Можно "по-каличному" сделать синхронный запрос: через внешний интерфейс выполнять javascript'ом через ajax синхронный запрос (абсурдно, но позволяет) запрос, получать ответ и возвращать назад во флеш. На время ожидания блокировать ввод. Очень чревато, так как на время ожидания поток javascript останавливается полностью, даже таймеры и хандлеры. Если не обращать на безопасность передачи, то выполнимо.

Старый 25.05.2009, 09:23
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
А зачем вообще это делать?

Старый 25.05.2009, 15:04
bmikle вне форума Посмотреть профиль Отправить личное сообщение для bmikle Найти все сообщения от bmikle
  № 10  
Ответить с цитированием
bmikle

Регистрация: May 2009
Сообщений: 8
To IDimitry: Спасибо ) но через Javascript это все таки слишком ))
То Etc: Я в первом вопросе объяснял зачем - чтобы встроить запрос в целую линейку разных проверок. То есть например оп реакции пользователя начнаем проверять корректность данных, проверяем введенные значения регуляркой и тд...
Так вот если мы хотим одну из проверок выполнить на сервере, например проверить уникальность объекта, то нам придется разбивать цепочку проверок как минимум на две части:
1) первая часть - заканчивающаяся посылкой запроса
2) вторая часть - в обработчиках событий result и failed.

Очень обидно идти на такие ухищрения ради одного boolean

Может быть кто то подскажет грамотное архитектурное решение? Я сам на FLEX пишу не давно, и возможно невольно тащу сюда привычки из offline кодинга.

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

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

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


 


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


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