| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Сетевая игра реального времени |
| Автор: APXEOLOG 19.6.2010, 17:24 |
| Доброго времени суток. Я понимаю в принципе все этапы создания сетевой игры кроме реализации самого протокола и синхронизации клиента и сервера. Я выскажу свое представление об этом, а вас попрошу прокомментировать исправить и дополнить мои рассуждения. Клиент: Существуют две очереди - одна для сообщений от сервера, другая для сообщений для сервера. В отдельном потоке с определенным интервалом получаются сообщения от сервера и добавляются в очередь. Также отправляются сообщения из очереди для сервера. В основном игровом потоке на каждом "игровом тике" происходит обработка сообщений от сервера, отрисовка графики. Все действия игрока пакуются в сообщения и добавляются в очередь на отправку серверу. Сервер: Отдельный поток ловит входящие сообщения. На каждом "тике" сервера обрабатываются сообщения в очереди и рассылаются сообщения клиентам. Таково мое видение связи между клиентом и сервером. Не вызовет ли это рассинхронизации? Что делать если по какой-то причине наступит рассинхронизация? |
| Автор: Rpahut 20.6.2010, 14:08 |
| Рассинхронизация будет обязательно. Интернет в принципе не может гарантировать конечного времени доставки данных. Клиент просто начинает визуализацию действия игрока и одновременно сообщает об этом серверу. Например персонаж начинает двигаться в какую-то сторону. Через какое-то время сервер присылает своё видение проблемы и состояние клиента подгоняется под параметры, присланные с сервера. Например корректируется позиция персонажа. Суть в том, что сервер решает всё, а клиент только пытается предугадать решение сервера и сразу начинает его выполнять чтобы уменьшить время задержки. Если клиент и сервер "думают" одинаково и информация в обе стороны доходит нормально, угаданные действия клиента совпадают с рекомендациями сервера. Если где-то теряются пакеты, получаются рывки, лаги и прочая фигня. |