Припускаючи ...
- ви говорите про перетворення в буфер байтів
- Ви використовуєте UDP, і продуктивність викликає занепокоєння
Намагайтеся не витрачати місця в пакеті для визначення структури. IE надсилає, як мінімум, байт для позначення типу пакету, тоді просто припускають, що кожен отриманий пакет відповідає попередньо визначеній структурі для цього типу пакету
Чи повинен я просто прочитати структури в сокет? Використовувати протіколові буфери / ощадливість?
- Так, прочитайте всю структуру ЯКЩО вам потрібна ціла структура
- Ні, зробіть структуру пакету самостійно. Це, безумовно, буде менше, ніж серіалізація за допомогою цих методів; ви повинні точно знати, які дані повинен включати пакет
Як я повинен представляти масиви даних?
- Як масиви даних. При отриманні продовжуйте читати буфер до кінця даних, щоб уникнути надсилання Count елементів масиву
Яким повинен виглядати інтерфейс для упаковки / розпакування даних?
- Ви можете легко налаштувати купу методів для перетворення основних типів у байти, звідти будувати ці методи для перетворення спеціальних типів. Конкретні відомості про те, як це зробити, можна знайти майже в будь-якому місці, в якому я впевнений (я використовую C # особисто)
І останнє, що розмір пакета викликає занепокоєння, особливо для знімка: size = packetSize x сутностей x підключенняPlayers; Таким чином, у вас може бути 60 x 10 x 16 = 9 600 байт на пакет, тоді ви надсилаєте це 20 разів на секунду: = 192 000 bps = 187 KBps. Очевидно, що це висока швидкість завантаження. Таким чином, потрібно мінімізувати кожен із факторів, що сприяють розміру пакету, де це можливо.
Ця стаття мені дуже допомогла:
Valve Multiplayer Networking