@Dead_Sea

Как поднять фпс клиент-серверного приложения в реальном времени?

Заинтересовался приложениями в реальном времени после копания в PyGame. Встал вопрос на примере игры(сам в game dev пока не лезу, так что вопрос абстрактный). При создании игры с несколькими клиентами было бы логично предпринять такие шаги:
1) Сделать ход на клиенте, сразу отправив его на сервер.
2) Сервер обработает ход, и вернёт информацию клиенту для дальнейшей отрисовки.
3) Собственно, сама отрисовка на клиенте.
В случае игр, важным фактором является фпс. Даже если предположить, что на клиенте должно выдавать 30фпс, значит нужно отрисовать заново картинку 30 раз. Получается 1кадр в 33мс. Значит на каждый ход, есть всего 33мс на то что бы отправить пакет, обработать его сервером, получить обратно для отрисовки и по новой. Не слишком ли мало времени? Тут конечно может помочь технология WebSocket, но и она не так уж стара, а ведь это делали и до этого протокола.
Верно ли я понимаю процедуру обмена информацией с сервером? Есть ли другие варианты?
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
@Nwton
Из исходников agar io:
setInterval(moveloop, 1000 / 60);
setInterval(sendUpdates, 1000 / 40);

1) Иначе говоря, инфу о нажатии клавиш клиент отправляет сразу;
2) Сервер эту инфу принимает и 60 раз в секунду ведет перерасчет данных о состоянии поля;
3) Параллельно 40 раз в секунду сервер долбит клиента, отправляя данные о текущем состоянии поля.
5) И это работает (https://github.com/huytd/agar.io-clone)

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

Войдите, чтобы написать ответ

Похожие вопросы