Assumindo ...
- você está falando sobre a conversão para um buffer de bytes
- Você está usando UDP e o desempenho é uma preocupação
Tente evitar desperdiçar espaço no seu pacote para definir a estrutura. O IE envia, no mínimo, um byte para indicar o tipo de pacote e, em seguida, basta assumir que cada pacote recebido segue a estrutura predefinida para esse tipo de pacote
Devo apenas ler estruturas no soquete? Use tampões proticol / parcimônia?
- Sim, leia toda a estrutura SE VOCÊ PRECISA de toda a estrutura
- Não, faça você mesmo a estrutura do pacote. Isso certamente será menor que a serialização usando esses métodos; você deve saber exatamente quais dados o pacote deve incluir
Como devo representar matrizes de dados?
- Como matrizes de dados. Ao receber, continue lendo o buffer até o final dos dados para evitar o envio de uma contagem dos elementos da matriz
Como deve ser a interface para empacotar / descompactar dados?
- Você pode configurar facilmente vários métodos para converter tipos básicos em bytes, a partir daí, desenvolver esses métodos para converter tipos personalizados também. Os detalhes sobre como fazer isso podem ser encontrados em quase qualquer lugar, tenho certeza (eu uso o C # pessoalmente)
Uma última coisa, o tamanho do pacote é uma preocupação, especialmente para um instantâneo: size = packetSize x entidades x connectedPlayers; Portanto, você pode ter 60 x 10 x 16 = 9.600 bytes por pacote. Em seguida, enviá-lo 20 vezes por segundo: = 192.000 bps = 187 KBps. Esta é obviamente uma alta velocidade de upload de banda. Daí a necessidade de minimizar cada um dos fatores que contribuem para o tamanho do pacote, sempre que possível.
Este artigo me ajudou imensamente:
Rede de múltiplos jogadores da Valve