top of page

Пастки мережевого коду: повідомлення, що зникають безслідно

Фото автора: Marcel Dütscher
Marcel Dütscher
21 черв.
Читати 1 хв

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


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


Пастка 2: блок-привид. Коли сервер змінює блок — скажімо, тому що скрипт перетворює ландшафт, — він має активно повідомити про це всіх підключених гравців. Забудьте про розсилку — і матимете блок-привид: сервер знає, що там є блок, а клієнт показує повітря. Гравець наштовхується на невидиму стіну — або, що гірше, будує там, де на боці сервера вже нічого немає. Лише перезавантаження чанка знову узгоджує обидва світи.


Спільний знаменник: у мультиплеєрі завжди є дві правди — серверна і клієнтська, і кожне місце, де їх треба синхронізувати, — потенційна пастка. Наша відповідь — тести, що перевіряють саме цю синхронізацію, і контрольні списки для нових повідомлень. Непомітно, але відтоді привидів поменшало.

Останні пости

Дивитися всі
Чому нова версія називається 2026.7.19, а не 0.9.2 🗓️

Хто оновлюється сьогодні, перестрибує з версії 0.9.1 на 2026.7.19. Це схоже на помилку друку, але це навмисне рішення: ми змінили схему версіонування, від «семантичних» версій до версій за датою (рік.

 
 

Коментарі


Коментування цього посту більше не доступне. Зверніться до власника сайту, щоб дізнатися більше.
bottom of page