Ok, je comprends vos besoins. J'écrirai un article technique sur PHP qui contient le sujet que vous avez spécifié et séparerai les parties qui ne sont pas liées au corps avant et après et avec une ligne horizontale du corps. Ce qui suit est le contenu de l'article:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Exemple de code pré-indépendant</span></span><span>
</span><span><span class="hljs-variable">$placeholder</span></span><span> = </span><span><span class="hljs-string">"Cette partie du code n'a rien à voir avec le texte"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$placeholder</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
--------------------------------------------------
</span><span><span class="hljs-comment"># passer socket_wsaprotocol_info_import Correspondre socket_shutdown Comment fermer la connexion élégamment</span></span><span>
Utilisé PHP Lors du réseau de programmation,TCP La gestion des douilles est un problème clé。Surtout lorsque le serveur ou le client doit gérer un grand nombre de connexions simultanées,Comment fermer les connexions gracieusement sans perdre de données devient un défi important。本文将介绍passer `socket_wsaprotocol_info_import` Correspondre `socket_shutdown` Pour réaliser une fermeture élégante TCP Comment se connecter。
</span><span><span class="hljs-comment">## un、arrière-plan</span></span><span>
Normalement,关闭un个 TCP La connexion peut être appelée directement `</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>()`。mais,Si le client ou le serveur dispose toujours de données insensées,L'arrêt direct peut entraîner des exceptions de perte de données ou de déclenchement。Pour résoudre ce problème,Peut être utilisé Windows Sous la plate-forme `WSAPROTOCOL_INFO` mécanisme,Importez des informations sur socket dans une nouvelle poignée,然后passer `socket_shutdown` Fermez la connexion étape par étape。
</span><span><span class="hljs-comment">## deux、Méthodes de base</span></span><span>
</span><span><span class="hljs-number">1</span></span><span>. **Obtenir WSAPROTOCOL_INFO information**
exister Windows Vers le bas,每个套接字都可以Obtenir对应的 `WSAPROTOCOL_INFO` 结构information,Utilisé pour décrire le protocole et l'état de la douille。
```php
</span><span><span class="hljs-variable">$sock</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-title function_ invoke__">socket_connect</span></span><span>(</span><span><span class="hljs-variable">$sock</span></span><span>, </span><span><span class="hljs-string">"127.0.0.1"</span></span><span>, </span><span><span class="hljs-number">8080</span></span><span>);
</span><span><span class="hljs-variable">$protocol_info</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">socket_wsaprotocol_info_export</span></span><span>(</span><span><span class="hljs-variable">$sock</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$protocol_info</span></span><span>);
</span></span>
Informations sur la prise d'importation
Utilisez socket_wsaprotocol_info_import pour importer les mêmes informations de socket dans un autre processus ou manipuler, gérant ainsi en toute sécurité son cycle de vie.
<span><span><span class="hljs-variable">$imported_sock</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_wsaprotocol_info_import</span></span><span>(</span><span><span class="hljs-variable">$protocol_info</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span></span>
Fermer élégamment la connexion
L'appel socket_shutdown peut spécifier les canaux de lecture, d'écriture ou de lecture et d'écriture de la prise pour fermer, garantissant que les données du tampon sont envoyées intactes.
<span><span><span class="hljs-comment">// Fermez d'abord le canal d'écriture,Assurez-vous que les données sont envoyées</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_shutdown</span></span><span>(</span><span><span class="hljs-variable">$imported_sock</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-comment">// Facultatif:Attendez que le pair confirme que les données sont reçues</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-comment">// Fermez enfin le canal de lecture</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_shutdown</span></span><span>(</span><span><span class="hljs-variable">$imported_sock</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$imported_sock</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$sock</span></span><span>);
</span></span>
Applicable aux plates-formes Windows uniquement
socket_wsaprotocol_info_export et socket_wsaprotocol_info_import sont des API spécifiques à Windows et ne sont pas disponibles sur les systèmes Linux / Unix.
Intégrité des données <br> Après avoir appelé socket_shutdown pour fermer le canal d'écriture, vous devez toujours vous assurer que les données ont été envoyées à partir du tampon, sinon cela peut amener le client à recevoir des données incomplètes.
Scénario multithread ou multi-processus <br> Les prises importées peuvent être utilisées dans différents threads ou processus pour faciliter la mise en œuvre de modèles de communication de réseau complexes, tels que l'équilibrage de la charge ou le traitement asynchrone.
Grâce à socket_wsaprotocol_info_import avec socket_shutdown , vous pouvez réaliser une fermeture élégante des sockets TCP sur la plate-forme Windows. Il peut assurer une transmission complète des données et permettre des prises de gestion sécurisées multiprogées ou multi-thread. Pour les serveurs ou programmes clients simultanés élevés qui nécessitent une communication à haute fiabilité, cette méthode est digne de référence et de pratique.
<span><span><span class="hljs-comment">// Exemple de code post-indépendant</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fin de l'article,Exécuter une autre logique non pertinente"</span></span><span>;
</span><span><span class="hljs-variable">$dummy</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$i</span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$i</span></span><span> * </span><span><span class="hljs-number">2</span></span><span>; }, </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>));
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>