Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Автообновление с внешнего php (http://www.flasher.ru/forum/showthread.php?t=208635)

Zombie 07.08.2014 21:30

Автообновление с внешнего php
 
В потоковом mp3 плеере потребовалось сделать вывод текущих треков с внешнего php-файла. Ниже привожу примеры кодов: первый с ручным обновлением, второй - автоматическое. Первый везде работает нормально, а во втором столкнулся с проблемой - на некоторых компьютерах после 3-4 минут работы плеер наглухо виснет. Подумал, что дело может быть в переполнении памяти (если ввести trace видно, что вывод запросов происходит ежесекундно). Действительно ли так, и если да, то как можно сократить частоту обновления?

Код AS3:

var urlLoader:URLLoader = new URLLoader();
update_mc.addEventListener(MouseEvent.CLICK, updateSong);
 
 function updateSong(e:MouseEvent = null):void
{
        var urlLoader:URLLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE,setInfo);
    urlLoader.load(new URLRequest("http://localhost/file.php"));
 
    function setInfo(e:Event):void{
        var loader:URLLoader = URLLoader(e.target);
        name_txt.text = urlLoader.data;
    }
}


Код AS3:

function callServer(e:Event):void{
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE,setInfo);
    urlLoader.load(new URLRequest("http://localhost/file.php"));
 
    function setInfo(e:Event):void{
        var loader:URLLoader = URLLoader(e.target);
        name_txt.text = urlLoader.data;
        }
    }
 
stage.addEventListener(Event.ENTER_FRAME, callServer);


bifidokk 08.08.2014 09:24

ну так еще бы, вы каждый фрейм дергаете сервер. зачем так часто? поставьте таймер

Zombie 19.04.2016 23:47

Опять столкнулся с такой же ситуацией: при использовании функции автообновления внешнего php на некоторых компах флешка намертво виснет через несколько минут. Таймер установил, php обновляется исправно через 15 сек. Правда все равно программа продолжает ежесекундно выдавать запросы во внутреннем окне, не знаю должно быть так или нет. Но если даже заменить
Код AS3:

trace(urlLoader.data);

на
Код AS3:

var loader:URLLoader = URLLoader(e.target);

- проблема не решается. Может кто-то глянет код.


Код AS3:

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
 
        var timer:Timer = new Timer(15000, 0);
        timer.addEventListener(TimerEvent.TIMER, fTimer);
 
        timer. start();
        function fTimer (e:TimerEvent){
 
                stage.addEventListener(Event.ENTER_FRAME, callServer);
        }
 
function callServer(e:Event):void{
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE, setInfo);
    urlLoader.load(new URLRequest("http://localhost/file.php"));
 
 
          function setInfo(e:Event):void{
        trace(urlLoader.data);
        name_txt.text = urlLoader.data;
        }
        }


faraday 20.04.2016 00:07

лол)
Код AS3:

timer.addEventListener(TimerEvent.TIMER, callServer);
function callServer(e:TimerEvent):void{
}


caseyryan 20.04.2016 06:03

Заметил, что почти все новички постоянно используют везде где только можно ENTER_FRAME. Наверное это связано с незнанием других событий.

Что вот это за чушь?
Код AS3:

// этот метод вызывается каждые 15 секунд
function fTimer (e:TimerEvent){
 // и добавляет всё ту же констнрукцию, которая будет дергать сервер каждый кад
 // в итоге происходит все ровно то же самое, что и в первом примере, только реализовано еще более криво
                stage.addEventListener(Event.ENTER_FRAME, callServer);
        }


Это что, программирование "пальцем в небо"?)

undefined 20.04.2016 07:55

ТС, запомни на будущее если есть место,где ты подписываешься на событие, должно быть и место,где ты от него отписываешься. В твоем случае даже если ты разберешься с частотой обновления, оно все равно со временем начнет лагать т.к. все ответы сервера складируются в памяти и неотписанный лисенер не дает сборщику мусора этот хлам почистить, просто добавь в setInfo строку:
Код AS3:

e.target.removeEventListener(Event.COMPLETE, setInfo);


Zombie 21.04.2016 18:26

Цитата:

Сообщение от faraday (Сообщение 1193438)
лол)
Код AS3:

timer.addEventListener(TimerEvent.TIMER, callServer);
function callServer(e:TimerEvent):void{
}


Благодарю, то что надо!:)


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

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