Écrire un proxy en Go (Golang) à l'aide de connexions TCP
Lors de la création d'un proxy TCP, la préservation des données est cruciale. Cet article explore les complexités liées à la détermination du moment où toutes les données d'un serveur ont été reçues, même si le format du message n'est pas connu à l'avance.
Une stratégie pour résoudre ce problème consiste à attendre après chaque lecture de socket pour s'assurer que le proxy ne le fait pas. Il ne lit pas plus vite qu'il ne reçoit de données. Cependant, des inquiétudes surviennent concernant les scénarios de délai d'attente qui empêchent le proxy de faire la distinction entre les sockets vides et les réponses retardées du serveur.
Une approche alternative consiste à comparer l'heure de l'appel en attente avec la valeur du délai d'attente. Si l'appel en attente dépasse le délai d'attente, il est raisonnable de supposer que le serveur a arrêté d'écrire, permettant ainsi au proxy de continuer et de fermer la connexion.
Bien que cette méthode puisse être efficace dans certains scénarios, tels que les centres de données restreints avec un minimum de retards, il est important de reconnaître les pièges potentiels. Par exemple, si le serveur n'écrit qu'un seul octet à la fois et que les délais sont importants, le proxy peut conclure à tort qu'il a reçu l'intégralité du message et mettre fin au transfert prématurément.
Pour atténuer les blocages potentiels, envisagez d'utiliser des goroutines. pour gérer des opérations de lecture et d'écriture distinctes, en garantissant qu'une opération bloquée n'arrête pas l'ensemble du processus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!