Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация таймера в онлайн игре 
:(
    Опции темы
krinart
Дата 21.9.2009, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 10.4.2008
Где: Донецк

Репутация: нет
Всего: нет



есть два варианта: 

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

2. Каждый раз при обращении клиента к серверу, сервер сообщает, сколько времени осталось на совершение действия. Погрешность будет возникать каждый раз. Если медленный интернет или просто забит канал, может появиться погрешность в 1 или даже 2 секунды. Конечно, это не очень не критичное, но всё же.

Подскажите, какое вариант более рациональный
PM MAIL ICQ   Вверх
bars80080
Дата 21.9.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



я так понимаю время с сервера сообщать каждый раз, но принимать его только в том случае, если клиентское время будет опаздывать.
т.е. первый раз нет никакого клиентского времени, мы принимаем сереверное. при следующих запросах, если вдруг оказывается, что клиентское отстаёт, то принимаем серверное
таким образом, в момент быстро прошедшего и вернувшегося запроса клиентское время войдёт в ритм с серверным
PM MAIL WWW   Вверх
IDVsbruck
Дата 21.9.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Изначально неправильный подход ... нужно делать так называемое keep-alone соединение, чтобы сервер мог сам инициировать событие клиенту тогда когда ему это нужно, а не ждал запроса от клиента. Естественно, это значительно сложнее, но уже сейчас есть ряд методик реализации такого подхода. Самая распространенная и популярная - Comet, когда посылается request, а response удерживается на сервере, используя его как постоянный канал отправки данных (как бы незакрытое соединение). Правда, в "чистом" html+javascript реализовывать не вполне удобно, так как страница будет постоянно иметь статус загружаемой (в ИЕ будут крутиться часики или что-то-там-еще), хотя можно попробовать через фрейм. Но зато эта методика великолепно подходит для вставляемой в страницу флешки, которая если нужно может обмениваться информацией со страницей - так сделаны большинство онлайн-игр.
Еще есть методика удерживающих ответов - Continuations: мы посылаем запрос, а сервер удерживает ответ до тех пор, пока не появится событие (или по истечении заданного времени), а когда возвращае, то клиент тут же отправляет снова запрос. С одной стороны, система менее гибкая - не сохраняется полноценная асинхронность запросов, но с другой - надежно и просто и на голову выше отправки запросов по таймеру - как недорогой и эффективный способ очень даже ничего (сам когда-то раскручивал - работало хорошо).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.