Deux façons d'utiliser TCP pour gérer les paquets persistants dans les jeux en ligne

    En tant que protocole de communication réseau de couche de transport fiable et orienté connexion, basé sur un flux d'octets, TCP est largement utilisé. Puisqu'il s'agit d'un protocole réseau basé sur un flux d'octets, nous utilisons le protocole TCP pour la communication réseau, et la couche inférieure divisera et combinera les données envoyées, de sorte que nous rencontrons généralement des problèmes de paquets persistants et de demi-paquets. En règle générale, afin de résoudre le problème de l'emballage collant, il existe deux façons de résoudre le problème du paquet collant et du demi-paquet:

  1. Encapsulez les données envoyées en paquets, tout comme le protocole TCP avec un en-tête.
  2. Utilisez des séparateurs, ajoutez des séparateurs à la fin des données lors de l'envoi des données.

 

     La première méthode traite des paquets persistants. Vous pouvez ajouter un en-tête de paquet de 2 octets à l'en-tête des données à envoyer pour stocker la longueur du paquet de données et ajouter un octet à la fin du paquet pour vérifier les données. La valeur de contrôle est égale à la valeur finale du XOR au niveau du bit de chaque octet des données cycliques.

     Dans les serveurs de jeux en ligne généraux, tels que les jeux mobiles, la première méthode sera utilisée pour traiter le problème des paquets persistants. Le problème des paquets persistants sera pris en compte lors de la conception du protocole. Chaque protocole contient un en-tête de protocole et un corps de protocole. Lors de la conception de l'en-tête de protocole, nous devons prendre en compte le problème des paquets persistants, et le corps du protocole correspond aux données que nous voulons envoyer.

En-tête de protocole:

struct protocol_head_t
{
   unsigned short tag;  // 0xFBFC 先导码标志消息起始
   unsigned short len;  // 数据包的长度,用来处理TCP粘包
   unsigned char  tp; // 标志协议体格式,json协议格式、Protocol Buffer协议格式等等
   unsigned short  msg_id; // 协议号用于区分协议数据,根据协议号解析数据
}__attribute__((packed));//取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,GCC特有的语法。

     La deuxième méthode consiste à ajouter un séparateur. Généralement, \ r \ n est utilisé comme séparateur, car la requête http utilise \ r \ n comme séparateur. Le protocole websocket est utilisé dans certains jeux. Websocket est différent du protocole http général, c'est une connexion longue, qui permet de réaliser la communication entre le web et le serveur. Dans la norme H5, le protocole websocket est implémenté au niveau inférieur, donc \ r \ n est utilisé comme séparateur dans les jeux Web H5, les jeux WeChat et les jeux Douyin, et le côté serveur implémente la communication websocket.

    Lorsque nous traitons le problème des paquets persistants, nous pouvons l'utiliser comme référence pour choisir une manière appropriée de traiter le problème des paquets persistants TCP et des demi-paquets, et concevoir le protocole de communication réseau en fonction de la situation réelle.

Je suppose que tu aimes

Origine blog.csdn.net/qq_19825249/article/details/108453972
conseillé
Classement