Мені цікаво оцінити різні способи, за допомогою яких нетткод може «підключитися» до ігрового двигуна. Я зараз розробляю гру для багатокористувацької гри, і поки що я визначив, що мені потрібно (принаймні) мати окремий потік для обробки мережевих розеток, відмінний від решти двигуна, який обробляє графічний цикл та сценарії.
У мене був один потенційний спосіб зробити мережеву гру повністю однопоточною, а саме - перевірити мережу після візуалізації кожного кадру, використовуючи неблокуючі сокети. Однак це, очевидно, не є оптимальним, оскільки час, необхідний для візуалізації кадру, додається до мережевого відставання: Повідомлення, що надходять через мережу, повинні чекати, поки завершиться подання поточного кадру (та логіка гри). Але, принаймні, таким чином геймплей все одно залишатиметься плавним, більш-менш.
Наявність окремого потоку для мереж дає змогу грі повністю реагувати на мережу, наприклад, вона може миттєво відправляти пакет ACK після отримання оновлення стану з сервера. Але я трохи розгублений щодо найкращого способу спілкування між ігровим кодом та мережевим кодом. Мережа мереж підштовхне отриманий пакет до черги, і ігровий потік прочитає з черги у відповідний час під час його циклу, тому ми не позбулися цієї затримки до одного кадру.
Крім того, схоже, я хотів би, щоб нитка, яка обробляє відправлення пакетів, була окремою від тієї, яка перевіряє наявність пакетів, що спускаються через трубу, тому що він не міг би відіслати його, поки він знаходиться в середині перевірка наявності вхідних повідомлень. Я думаю про функціональність select
чи подібне.
Я думаю, моє запитання полягає в тому, який найкращий спосіб створити гру для найкращої мережевої чутливості? Очевидно, що клієнт повинен якомога швидше надсилати введення користувача на сервер, тому я міг би отримати код net-send негайно після циклу обробки подій, як усередині циклу ігор. Це має сенс?