Langage: C ++
Ma question est la suivante: je voudrais savoir quel serait le meilleur ou au moins un bon moyen de regrouper et d'envoyer des données du client au serveur et inversement. Il y aura quelques données composant un seul paquet. Un paquet aura un "id", qui définit à quoi il sert, puis les données dans un ordre prédéterminé pour cette "action" à laquelle le paquet correspond.
Pour les systèmes moins dépendants des performances, j'enverrais simplement des chaînes, qui seraient séparées par un espace, étant elles les données de "l'action" et le premier "mot" l'identifiant du paquet et juste enchaîner si les instructions vérifient quand il y a une correspondance .
Maintenant, pour un système plus critique, ce que j'ai pensé jusqu'à présent était quelque chose comme ceci:
Créez une chaîne avec l'ID et les données du paquet et envoyez-la. Ensuite, pour décompresser, je pourrais extraire le premier entier de la chaîne, et en ayant un tableau de gestionnaires de paquets, avec des indices correspondant à l'ID de paquet qu'ils gèrent, et juste faire quelque chose comme packetHandlers [packetID] .Process (packetData).
Qu'en pensez-vous, des suggestions? grandement apprécié!
la source
Pourquoi utiliser deux schémas de codage différents? Utilisez simplement le second pour chaque système. Restez simple.
Pensez à utiliser la compression delta. C'est à dire envoyer une valeur complète et après cela, seules les choses qui ont changé. Après quelques itérations de jeu, renvoyez une valeur complète.
Une autre encodage que vous pourriez envisager est Base 128 Varint. Google Protobufs l'utilise. Jetez un œil à la page "Encodage" de leur guide du développeur: Encodage des tampons de protocole Pourrait économiser quelques octets.
la source
Quel pourrait être un exemple des données que vous envoyez? Je ne vois aucune raison de faire quelque chose de trop sophistiqué. Une fois que les données sont entièrement chargées dans le tampon du récepteur, inspectez le premier en
int
fonction de sa valeur, vous savez alors comment traiter le reste des données.Donc , un paquet qui comporte quatre parties de données
id
,val1
,val2
etval2
pourrait ressembler à ceci:En lisant le premier octet (dont vous savez qu'il sera toujours là), vous décidez comment traiter le prochain ensemble de données. Si le premier mot (id) est que
00000001
vous savez, il y a trois autres mots suivants, et c'est la fin du paquet. Pour poursuivre l'exemple, vous pourriez avoir id =00000010
et votre cahier des charges vous indique que , pour identifiant 2, vous traitezfloat
,float
,float
dans cet ordre, ce qui pourrait indiquer une position de joueur dans l' espace mondial.Considérez-le comme l'écriture de votre propre système de fichiers binaires, vous avez une valeur d'en-tête, qui décrit le reste des données, où il se trouve (quelle position) et quel type de données pour le traiter.
la source