Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Синхронный обмен клиент-сервер (http://www.flasher.ru/forum/showthread.php?t=125417)

bmikle 23.05.2009 19:58

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

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

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

7thsky™ 24.05.2009 00:12

Синхронный запрос на сервер - пока не реализуем. Смотрите другие варианты

bmikle 24.05.2009 02:20

С этим уже смирился..
можно я приведу ужасный код а вы мне скажите что здесь можно поправить?


Код 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) - идея такая.
Возможно ли подобным образом организовать остановку выполения во флексе?

etc 24.05.2009 10:46

Нет, нельзя, AVM работает в одном потоке.

bmikle 24.05.2009 11:56

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

etc 24.05.2009 12:02

Цитата:

Сообщение от bmikle (Сообщение 822523)
Они все асинхронные?

Без исключения.

bmikle 24.05.2009 15:58

Большое спасибо, вопрос исчерпан :)

IDimitry 25.05.2009 03:41

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

etc 25.05.2009 09:23

А зачем вообще это делать?

bmikle 25.05.2009 15:04

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

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

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


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

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