Предполагая, что ...
- вы говорите о преобразовании в буфер байтов
- Вы используете UDP, и производительность является проблемой
Старайтесь не тратить место в вашем пакете на определение структуры. IE отправляет, как минимум, байт для обозначения типа пакета, а затем просто предполагает, что каждый полученный пакет следует предварительно определенной структуре для этого типа пакета
Должен ли я просто читать структуры в сокет? Использовать Proticol буферы / бережливость?
- Да, прочитайте всю структуру, если вам нужна вся структура
- Нет, сделайте структуру пакета самостоятельно, это, безусловно, будет меньше, чем сериализация с использованием этих методов; вы должны точно знать, какие данные пакет должен включать
Как я должен представлять массивы данных?
- Как массивы данных. При получении продолжайте чтение буфера до конца данных, чтобы избежать отправки количества элементов массива
Как должен выглядеть интерфейс для упаковки / распаковки данных?
- Вы можете легко настроить кучу методов для преобразования базовых типов в байты, оттуда основываться на этих методах для преобразования пользовательских типов. Подробности о том, как это сделать, можно найти практически везде, я уверен (я лично использую C #)
Одна последняя вещь, размер пакета является проблемой, особенно для снимка: размер = PacketSize х субъектов х connectedPlayers; Таким образом , вы можете иметь 60 х 10 х 16 = 9600 байт на пакет затем отправить это в 20 раз в секунду: = 192000 бит в секунду = 187 Kbps. Это очевидно высокая скорость загрузки. Таким образом, необходимо минимизировать каждый из факторов, влияющих на размер пакета, где это возможно.
Эта статья мне очень помогла:
Valve Multiplayer Networking