top of page

Ловушки сетевого кода: сообщения, которые тихо исчезают

Фото автора: Marcel Dütscher
Marcel Dütscher
21 июн.
1 мин. чтения

Ошибки в многопользовательских играх — особый вид: ничего не падает, в журнале нет ни одной ошибки — просто ничего не происходит. Две наши любимые ловушки из собственного сетевого кода — в качестве предупреждения и для развлечения.


Ловушка 1: незарегистрированное сообщение. Наш сетевой протокол знает классы сообщений — «блок изменился», «игрок переместился», «чат». Каждый новый тип сообщения нужно зарегистрировать в кодеке, чтобы он получил ID и его можно было сериализовать. Забудешь — случится худшее: вызов отправки не срабатывает, но ошибка тихо проглатывается. Ни падения, ни записи в журнале — функция «просто не работает». Мы отлаживали это не раз, пока не выработался рефлекс: новый класс сообщения? Первый вопрос: он зарегистрирован?


Ловушка 2: блок-призрак. Когда сервер меняет блок — например, потому что скрипт перестраивает рельеф, — он должен активно сообщить об этом всем подключённым игрокам. Забудешь разослать — получишь блок-призрак: сервер знает, что там есть блок, а клиент показывает воздух. Игрок упирается в невидимую стену — или, что хуже, строит там, где на сервере уже ничего нет. Только перезагрузка чанка снова согласует оба мира.


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

Недавние посты

Смотреть все

Комментарии


Комментарии к этому посту больше не доступны. Обратитесь к владельцу сайта за дополнительной информацией.
bottom of page