Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.02.2013, 22:41
xjack вне форума Посмотреть профиль Отправить личное сообщение для xjack Найти все сообщения от xjack
  № 1  
Ответить с цитированием
xjack

Регистрация: Apr 2009
Сообщений: 104
По умолчанию Запаздывание в real-time онлайн игре

Всем доброго времени суток. В данный момент занимаюсь созданием real-time игры для соц. сети, где необходимо моментально передавать информацию о перемещении игрока всем его оппонентам. Взаимодействие клиента и сервера осуществляется через сокеты. Сервер написан на C# c использованием асинхронных сокетов.
Сообщение серверу посылается не каждый кадр а в момент нажатия и отжатия игроком клавиши(если клавишу удерживать то сообщение не передается, только в момент клика), далее траектория его движения во флешках оппонентов высчитывается . Вес сообщения минимальный - всего 10 байт.
Когда запускаю сервер и клиентов(2 экземпляра флеш) на локальном компе, то все работает идеально, движения игрока без задержек отображаются в окне оппонента. Но как только запустил серверную часть на удаленном dedicated server(i7 - 4 ядра) все стало намного печальнее. Начало движения, изменение траектории, остановка происходят с весьма заметным опозданием. Самый простой пример - игрок движется по прямой, я отпускаю клавишу - он останавливается, но в окошке оппонента продолжает бежать еще несколько кадров. А когда начинаешь прыгать там вообще вся траектория сбивается.
Вопрос - что я делаю не так? По идее, если на локальном компе все ок, значит скорость работы серверной части нормальная. Объемы передаваемой по сети информации минимальны. Тестирую пока на двух игроках. В чем может быть проблема?

Старый 07.02.2013, 23:16
stasuss вне форума Посмотреть профиль Отправить личное сообщение для stasuss Найти все сообщения от stasuss
  № 2  
Ответить с цитированием
stasuss
 
Аватар для stasuss

Регистрация: Jun 2011
Сообщений: 19
а может все таки дело в пинге до сервера?

Старый 07.02.2013, 23:23
xjack вне форума Посмотреть профиль Отправить личное сообщение для xjack Найти все сообщения от xjack
  № 3  
Ответить с цитированием
xjack

Регистрация: Apr 2009
Сообщений: 104
Пинг где-то от 80 до 115.

Старый 08.02.2013, 01:35
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Это не так мало. 115 - это более 4 кадров при 40фпс. Замерьте время между отправкой сообщения и приходом реакции от сервера (и ещё можно отдельно между отправкой и собственно рендером результата).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 08.02.2013, 14:11
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 5  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Дык, это. Повсеместно это. А лаг вы, кстати, внутриигровой измеряете или просто пингуете? Потому что это разные вещи. Tcp, к сожелению, накладывает еще и свои ограничения, ну сами должны знать, ожидание устаревшего пакета и т.д. Поэтом и придумывают всякие алголитмы лаг компенсации и сглаживания-интерполяции, но в общем-то не очень-то и помогает. При пинге больше 200 - играть не комфортно, как ни старайся(ну это для шутеров, для рпг типа WoW или rts не так критично).

P.S. И не забудьте отключить алгоритм Нагля в настройках тсп серверного приложения. Хотя черт его знает, помогает ли, но все рекомендуют =)
__________________
мой пустой блог

Старый 08.02.2013, 16:24
xjack вне форума Посмотреть профиль Отправить личное сообщение для xjack Найти все сообщения от xjack
  № 6  
Ответить с цитированием
xjack

Регистрация: Apr 2009
Сообщений: 104
В общем, сегодня поэкспериментировал с измерением времени, так что теперь привожу конкретные данные.
в первом окошке засек время отправки сообщения о нажатии/отпуске клавиши, во втором - время его получения в миллисекундах.
И вот результаты: когда интервалы между сообщениями длительные(например нажал клавишу, несколько секунд удерживаю затем отпускаю), до оппонента они доходят примерно через 80 мс каждое. А теперь самое интересное -когда нажимаю и сразу же отпускаю(обычный клик). Key_down доходит также где-то через 80 мс, а вот key_up через ~300 мс! Вот например результаты последнего замера: Отправка (key_down:0, key_up:52), получение: (key_down:78, key_up:365(!!!)). Похоже дело не только в пинге.

Старый 08.02.2013, 16:43
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 7  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Э, так дело не покатит. Какие key_down, key_up? У тебя на сервере и на клиенте из-за лагов сети совершенно непредсказуемый промежуток времени между этими событиями произойдет. Изменение координат персонажей надо пересылать. А на клиенте полученные данные интерполировать, иначе персонаж скачками будет перемещаться. Вам бы теорию почитать. Много теории. Гуглите programming multiplayer games, interpolation, lag compensation, predicting, tcp vs upd. Конкретных статей не посоветую.
__________________
мой пустой блог

Старый 08.02.2013, 17:23
xjack вне форума Посмотреть профиль Отправить личное сообщение для xjack Найти все сообщения от xjack
  № 8  
Ответить с цитированием
xjack

Регистрация: Apr 2009
Сообщений: 104
Сделал замер времени на сервере - оказывается он УЖЕ получает данные сообщения с интервалом 280-300 мс, хотя ушли они с интервалом 50 мс. Кто может подсказать в чем проблема такого сдвига по фазе? Может быть есть некая минимальная задержка с которой TCP отправляет сообщения.

Старый 08.02.2013, 17:39
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 9  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Tcp/ip - протокол с гарантированной доставкой пакетов. Это означает, что 1) пакет не окажется в буфере, пока не сойдутся чексуммы 2) если не отключен алгоритм Нагля, то сервер не будет передавать следующий пакет в буфере отправки, пока не получит от клиента подтверждения о том, что предыдущий пакет доставлен без ошибок(это происходит на уровне протокола, естественно).
Вот и считай. Пинг от тебя до сервера, скажем 100мс. Соответсвенно, от клиента до сервера и к другому клиенту - 200мс. С ожиданием подтверждения о доставке пакета - еще больше. Такая математика.
__________________
мой пустой блог

Старый 08.02.2013, 17:42
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 10  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
xjack,Скорее всего дело в работе сервера.
Когда мы делали real-time клиент-серверное приложение на Flash + Java(сервер), пинг был 50-80 мс, с учетом того, что сервер, фактически, в соседнем городе.
Может быть проблема с удаленным сервером, может быть что-то еще.

Попробуйте запустить сервер у себя, и проверить с кем-нибудь из собственного горда работу приложения
______
А да, и потом мы все таки отступили от технологии socket server в пользу P2P. Для P2P соединений флеш использует UDP протокол.
Поскольку полноценный socket server в любом случае имеет верхнюю границу онлайна при передаче данных в режиме реального времени..

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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