ПрограммированиеФорумСеть

Какая частота обмена сообщениями между клиентом и сервером нужна для работы mmo?

Страницы: 1 2 Следующая »
#0
10:27, 27 янв 2015

Какая частота обмена сообщениями между клиентом и сервером нужна для комфортной работы mmo?

Написал комет сервер и хочу приспособить его для организации браузерных игр.
Но у меня пока нормально работает если сведения на сервер отправлять с интервалом примерно 75мс если чаще то браузер начинает присылать сообщения по WebSocets с какими то флагами расширения и декодировать эти сообщения у меня не получается. А при интервале в 75мс видны рывки при перемещении персонажей.

Занимался интерполяцией и получилось что рывки начали быть заметны только при резкой смене направления движения.
И собственно в какую сторону развивать работу? Править сервер для повышения производительности или как то заглаживать проблему на клиенте?

Ведь отправлять сообщения с интервалом меньше 10мс на мой взгляд уже трудоёмко для браузера и js там ведь и другой код должен когда то работать.

#1
11:16, 27 янв 2015

Что за флаги расширения? Что-то я ничего подобного в доке по WebSocket-ам не нашел. Чем парсишь протокол на сервере?

#2
13:22, 27 янв 2015

Очень странная проблема я тоже с ней долго боролся и подозреваю что виной всему какая то проблема в в моей реализации серверной части.
Проявляется у меня проблема при высокой скорости отправки сообщений с клиента. Первые 5 или 10 сообщений приходят обычными а потом приходит сообщение в заголовке которого флаги RVS1  RVS2 RVS3 не равны нулю.
Как работать с такими сообщениями я не знаю.

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


Я использую C++ на сервере. но готового решения для с++ я не нашёл и по этому написал своё.

#3
14:26, 27 янв 2015

Levha
> флаги RVS1 RVS2 RVS3
флаги тоже твои самописные?

> смущает отсутствие информации про эти флаги даже в описании протокола
добавь, делов-то, свой код полезно иногда документировать : )

З.Ы.
вообще по-названию я бы предположил, что флаги эти резервные
http://greenbytes.de/tech/webdav/rfc6455.html#baseframing

скорее всего у тебя стрим съезжает, т.е. ты не учитываешь особенности ТСР и не перекладываешь "хвостики"

#4
15:51, 27 янв 2015

Что за ммо? Нонтаргет и управление с клавиатуры или управление кликом мыши, как в ла2?

#5
16:18, 27 янв 2015

Ну да кстати если с мышки кликать то 75мс интервал мне кажется достаточным.
Но я интересовался про управление с клавиатуры.

#6
16:46, 27 янв 2015

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

Levha
> Но я интересовался про управление с клавиатуры
Насколько я знаю, в ммо-слэшерах и шутерах эта проблема решается отправкой большого количества UDP пакетов, как раз те самые < 75 мс + интерполяция. У UDP нет проверки доставки, сеть пропускает в разы больше.
WebSokets построены поверх TCP, и там такое не прокатит. Самый очевидный вывод: делать экшн-ммо или шутер на TCP-based WebSockets - не самая лучшая идея. Если бы эту проблему можно было решить в рамках TCP, никто бы не мирился с потерей пакетов, и все пользовались TCP. Но решения для TCP, видимо, нет.

#7
16:51, 27 янв 2015

скорее всего у тебя стрим съезжает, т.е. ты не учитываешь особенности ТСР и не перекладываешь "хвостики"

Я вот тоже за это голосую:) Надо код вычитки пакета глядеть:)

#8
19:58, 27 янв 2015

wmask
Все так, в играх, где рассинхрон в пределах 100мс уже фатальный, используют UDP.
Пример - haxball.com, там рассинхрон даже в один пиксель может серьезно повлиять на игру и там UDP (правда, там p2p, но это не важно)
Levha, можете декомпильнуть хаксбол и взглянуть на реализацию синхронизации - из-за p2p там 'в одном флаконе' и клиентский код и как бы серверный (один из игроков хостит остальных в комнате). полезно.

#9
23:08, 27 янв 2015

Levha
> управление с клавиатуры
а чем оно принципиально отличается? : )

слать надо тока смену состояния с отжатого на нажатое и наоборот

#10
23:40, 27 янв 2015

Sh.Tac.
> а чем оно принципиально отличается? : )
Необходимой отзывчивостью и кол-вом значащих команд в секунду.

#11
23:47, 27 янв 2015

ты следил когда-нить за руками? : )

например в шутере
обычно нажаты максимум две клавиши, самый распространённый кейс такой, нажали и держим, причём гораздо дольше, чем упомянутые 75 мс (13 раз в секунду)

#12
1:07, 28 янв 2015

Sh.Tac.
Все равно движение по клику мышки - симулируется с нулевой погрешностью и требует пару десятков байт на один клик.
А движение по клавиатуре должно быстро реагировать на поворот мышки и нажатие клафиш, хотя бы со 50..100мс инерцией

#13
1:37, 28 янв 2015

-Eugene-
> движение по клику мышки - симулируется с нулевой погрешностью
ни разу, тоже нужен предикшн по-хорошему

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

> движение по клавиатуре должно быстро реагировать на поворот мышки
это ближе к делу, в шутере основная тяжесть ввода приходится на постоянное отслеживание мыши, но мы тут за клавиатуру разговариваем : )

потому как неизвестно чего у автора за игра

З.Ы.
> хотя бы со 50..100мс инерцией
ключевое слово уже было сказано, интенсивность обмена никак не влияет на лаг, вернее даже влияет отрицательно, чем больше засираешь сеть, тем дольше ждёшь ответа

#14
4:11, 28 янв 2015

Всем большое спасибо. Пересмотрю код своего сервера.
На сколько я знаю, в данный момент средствами JavaScript нельзя  отправить udp пакет и в моём случаи рационально мирится с ограничениями TCP чем переходить на работу с Flash.

Страницы: 1 2 Следующая »
ПрограммированиеФорумСеть

Тема в архиве.