Форум 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=103392)

IDVsbruck 04.11.2007 18:09

Рекурсия при запросах к серверу
 
Нашел замечательный механизм - задержка ответа сервера при ajax-запросе (так называемый Continuation из Jetty, технология Comet) - когда ответ с сервера приходит при получении ожидаемого события (например, обновление информации только когда на страницу входит новый посетитель). Так как запрос асинхронный, флешка работает в нормальном режиме.

Вызов осуществляю вызовом функции:
Код:

function getStatus() {
        var sendData = new LoadVars();
        var loadData = new LoadVars();
        loadData.onLoad = function(success: Boolean) {
                if (success) {
                        if (loadData.param1 != undefined) lblParam1.text = loadData.param1;
                        if (loadData.param2 != undefined) lblparam2.text = loadData.param2;
                        getStatus();
                }
        }
        sendData.userID = userID;
        sendData.sessionID = sessionID;
        sendData.recieveParameter = "get_status";
        sendData.sendAndLoad("{path to my script}", loadData);
}

Можно ли таким образом делать постоянный опрос сервера? Допустима ли рекурсия в таком исполнении? (Просто я что-то такое слышал об ограничении флешем уровней рекурсии - может, это и бред, но когда приложение не работает и не можешь найти решения, то прислушиваешься уже ко всему).

Ну и еще такой вопрос: наверняка кто-то реализовывал на флеше реакцию на действия сервера не сокетом (к сожалению, мне он тут не подходит), а постоянным опросом сервера через, например, равные промежутки времени на предмет наличия изменений. В чистом html (или jsp) это сделать проще - ответом сервера служит скрипт с функцией повторного запроса - и следующий вызов происходит не из функции (она завершила свою работу - получила контент), а путем запуска скрипта из вновь полученного контента. А вот как это же реализовывают во флеше? - Если простой рекурсией, то нет ли переполнения стека? Не съедается ли память?

Большая благодарность за помощь или совет.

etc 04.11.2007 18:23

Не мучайте сервер.

17777

DarkLight 04.11.2007 18:36

Чтобы не бояться рекурсии, можно использовать setTimeout, но если юзеров будет много, серверу будет плохо....

IDVsbruck 04.11.2007 23:44

Ну, если честно, то серверу по барабану ...
Согласно документации Jetty сервер может принять на себя одновременно 10700 конкурирующих запросов, при этом обрабатывая 5000 запросов в секунду. Стек памяти занимает при полной загрузке 57М. Если учесть, что под проект выделен отдельный сервер (без конкурирующих проектов), а даже очень загружающий мультигейминг ну никак не будет дотягивать до такого количества.

Кстати, сокеты будут тянуть больше ресурсов сервера. То есть в теории к серверу может подключиться бесконечное количество клиентов, но все знают, что такое ДДОС-атака (кажется, так), когда при большой загрузке порта, выделенного под сокет, ложится сервак.

А вот насчет setTimeout спасибо - как-то забыл про него.

7thsky™ 05.11.2007 02:28

Я вообще не понял где в вашем коде рекурсия (касательно флэша) так как там нету рекурсии то беспокоиться о 256 уровнях рекурсии не обязательно, насчет push'a.

Есть сервер lightstreamer (http://www.lightstreamer.com/) у них есть хорошая библиотека для клиента на аs2/as3 (жалко что они идут только с платными версиями).

В ас3 можно без труда реализовать comet через flash.net.URLStream (так например в лайтстриммер и реализованно), с ас2 трудней, но тоже реализуемо.

FourSide 06.11.2007 12:14

Мне кажется, приведённый код работать вообще не будет.
Метод getStatus не описан в объекте loadData.


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

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