Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Таймер обратный отсчет, привязка к серверному времени (http://www.flasher.ru/forum/showthread.php?t=132746)

Oli Short 19.11.2009 16:02

Таймер обратный отсчет, привязка к серверному времени
 
Здравствуйте!

Имеется код, код понятен !
Код AS3:

var count:Number = 60;
 
var myTimer:Timer = new Timer(1000,count);
 
myTimer.addEventListener(TimerEvent.TIMER, countdown);
 
myTimer.start();
 
function countdown(event:TimerEvent):void {
myText_txt.text = String((count)-myTimer.currentCount);
}

Приложение по типу аукциона, т.е сколько осталось до окончания ставки.

Отталкиваться буду от серверного времени (time()), как достать значение и передать во флеш тоже знаю.

Ведь для правильной-логической работы таймера у всех пользователей отсчет времени должен быть одинаков, т.е не +3 секунды у одного, -2 секунды у другого. Тут встал вопрос... загрузка приложения у всех будет по разному, разумеется чтобы достать значение уйдет время, боюсь что таймер у всех будет запаздывать по разному.

моя реализация...
загружать время сервера с сервера(A), так же загружать время окончания тендера(B).

потом учитывать разность ... B-A

Код AS3:

var count:Number = 60;

надеюсь понятно объяснил.
Спасибо!

Artic 19.11.2009 16:07

в чем суть топика ?

PS "Приложение по типу аукциона" не делаются на флашь

Oli Short 19.11.2009 16:39

загвостка

Цитата:

Ведь для правильной-логической работы таймера у всех пользователей отсчет времени должен быть одинаков, т.е не +3 секунды у одного, -2 секунды у другого. Тут встал вопрос... загрузка приложения у всех будет по разному, разумеется чтобы достать значение уйдет время, боюсь что таймер у всех будет запаздывать по разному.
почему не делается? в том же контакте уже есть подобные реализации

Котяра 20.11.2009 10:13

Цитата:

начальная установка
клиент дай время -
сервер 9.59

опрос:
клиент - моё время 10.00
сервер - моё 10.02
клиент - ага разница 2 секунды /2 = 1 секунда
устанавливаем время на 10.03
...
клиент моё время 10.05
сервер моё - 10.09
клиент: ага разница 4 секунды /2= 2
устанавливаем время на 10.11
Код AS3:

package  
{
        /**
        * Синхронизация с серверным таймером
        * @author k0t0vich
        */

        public class SynchroTimer
        {
                private var delta:int;
                private var answerTime:int;
                private var syncTime:int;
                private var savedTime:int;
 
                /**
                * обработчик данных от сервера - начальное время
                * @param        serverTime
                */

                public function onStartTime(serverTime:int)
                {
                        syncTime = serverTime;
                        savedTime = getTimer();
                }
 
 
 
                /**
                * обработчик данных от сервера - текущее время
                * @param        serverTime
                */

                public function onServerTime(serverTime:int):void
                {
                                delta = (serverTime-answerTime)/2;
                                syncTime = serverTime + delta;
                                savedTime = getTimer();
                }
 
 
                /**
                * Текущее синхронизированное время
                */

                public function get time():int
                {
                        var ret:int = getTimer() - savedTime + syncTime;
                        return ret;
                }
 
                public function getServerTime():void
                {
                        answerTime = time;
                        ///// послыаем запрос на сервер
                        //..
                }
 
                public function getSatrtServerTime():void
                {
                        answerTime = getTimer();
                        ///// послыаем запрос на сервер
                        //..
                }
 
        }
 
}

в этой схеме предполагается что вопрос и ответ шлются одинаковое время, что на самом деле не всегда правда, но такая схема позволяет немного нивелировать ошибку, да и разница в 1-2 секунды в случае аукциона наверное не очень существенна, хотя в каких нибудь реалтайм стрелалках прилиична, но в этом случае поможет только сокет.

Oli Short 20.11.2009 20:08

в принципе и не большая разница застоя
http://vprokate.zxq.net/i.swf

3 милиссекунды

Котяра 23.11.2009 10:26

Ну на такие тесты полагаться не стоит. Реальные задержки (особенно при передаче и подготовке данных на сервере) могут составлять до 5 секунд. Хотя это тоже зависит от сервера.


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

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