Position actuelle: Accueil> Derniers articles> Comment contrôler la taille maximale du tampon d'envoi d'une prise via socket_set_option?

Comment contrôler la taille maximale du tampon d'envoi d'une prise via socket_set_option?

gitbox 2025-08-18

Lors du développement de programmes de réseau basés sur des douilles à l'aide de PHP, le contrôle de la taille du tampon d'envoi peut améliorer les performances du programme dans une certaine mesure, en particulier dans les scénarios où la transmission des mégadonnées ou les connexions simultanées élevées sont gérées. La fonction socket_set_option () fournie par PHP nous permet de contrôler soigneusement le comportement des connexions de socket, y compris le réglage de la taille du tampon d'envoi. Cet article présentera comment utiliser cette fonction pour définir la taille maximale du tampon d'envoi de la prise et expliquer les précautions pertinentes.

1. Introduction à socket_set_option ()

socket_set_option () est une fonction utilisée en php pour définir les options de socket, et son prototype est le suivant:

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_set_option</span></span><span>(
    Socket </span><span><span class="hljs-variable">$socket</span></span><span>,
    </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$level</span></span><span>,
    </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$option</span></span><span>,
    </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>
)
</span></span>
  • $ socket : la ressource de socket créée par socket_create () .

  • $ Niveau : Niveau d'option, Sol_Socket est couramment utilisé.

  • $ Option : Définissez des options spécifiques, telles que SO_SNDBUF indique la taille du tampon d'envoi.

  • $ Value : la valeur de l'option, qui peut être une valeur booléenne, un entier, etc. selon l'option.

2. Réglez la taille du tampon d'envoi

Le nom d'option pour l'envoi de la taille du tampon est SO_SNDBUF . Nous pouvons le configurer avec le code suivant:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-variable">$socket</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-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$socket</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Socket La création a échoué: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()));
}

</span><span><span class="hljs-comment">// Définir la taille du tampon d&#39;envoi,Par exemple 1MB</span></span><span>
</span><span><span class="hljs-variable">$bufferSize</span></span><span> = </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">socket_set_option</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, SOL_SOCKET, SO_SNDBUF, </span><span><span class="hljs-variable">$bufferSize</span></span><span>)) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la définition du tampon d&#39;envoi: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>)));
}

</span><span><span class="hljs-comment">// Vérifiez que les paramètres réussissent</span></span><span>
</span><span><span class="hljs-variable">$current</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_get_option</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, SOL_SOCKET, SO_SNDBUF);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Taille de tampon envoyée actuelle: <span class="hljs-subst">{$current}</span></span></span><span> octet\n";

</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Il convient de noter que le système d'exploitation peut ne pas appliquer strictement le tampon en fonction de la taille que vous définissez, et apportera généralement certains ajustements à la valeur définie (comme l'ajout de frais généraux de première classe), de sorte que la valeur obtenue via socket_get_option () peut être légèrement plus grande que la valeur définie.

3. Scénarios d'application pratiques

1. Transmission de grands paquets

Lorsque votre demande doit envoyer une grande quantité de données via une prise, un tampon d'envoi trop petit entraînera des appels système fréquents (écriture / envoi), ce qui affectera l'efficacité. L'augmentation appropriée du tampon peut réduire le nombre d'appels et augmenter le débit.

2. Serveur de concurrence élevé

Lorsque le serveur gère un grand nombre de demandes client en peu de temps, si le tampon d'envoi est trop petit, un blocage de données ou une panne d'envoi peut se produire. La préréglage d'un tampon plus grand peut améliorer la tolérance aux défauts du système.

4. Choses à noter

  • La définition de la taille du tampon ne signifie pas qu'elle prendra effet immédiatement et que le système d'exploitation peut avoir une limite maximale.

  • Certaines plates-formes (telles que Linux) ont des limites de paramètres du noyau sur la taille maximale du tampon, telles que / proc / sys / net / core / wmem_max .

  • L'augmentation du tampon consommera plus de ressources de mémoire et devrait être définie en fonction des besoins réels et des capacités du serveur.

  • Il est préférable de vérifier si le socket a été créé avec succès avant de le définir, sinon le paramètre ne fonctionnera pas.

5. Résumé

La définition de la taille du tampon d'envoi via socket_set_option () est un moyen efficace d'optimiser les performances des applications de socket PHP. En combinant des scénarios d'utilisation spécifiques et des limitations du système, l'efficacité et la stabilité de la transmission des données peuvent être plus raisonnablement contrôlées. Il est recommandé que les développeurs vérifient la taille du tampon réel avec socket_get_option () lors de son implémentation, afin de s'assurer que les paramètres obtiennent les résultats attendus.