Dans la programmation du réseau PHP, la connexion persistante est cruciale pour améliorer les performances et réduire la consommation de ressources. Une méthode courante pour implémenter de longues connexions consiste à définir l'option SO_KEEPALIVE de TCP, afin que le système d'exploitation envoie périodiquement des paquets "Keep Live" pour détecter si la connexion est toujours valide. Cet article combinera la fonction SOCKET_SET_OPTION de PHP pour expliquer en détail comment utiliser so_keepalive pour obtenir une longue rétention de connexion.
SO_KEEPALIVE est une option de socket dans le protocole TCP. Après avoir allumé cette option, le système d'exploitation enverra automatiquement une sonde Keepalive au pair pendant une certaine période de temps s'il détecte que la connexion est inactive, pour confirmer si la connexion est toujours en vie. Si l'autre partie ne répond pas, la connexion est considérée comme déconnectée.
Avantages de l'utilisation de SO_KEEPALIVE :
Réduisez les connexions de «fausse mort» causées par la déconnexion.
Libérez les connexions non valides à temps pour économiser des ressources.
Convient aux applications qui doivent rester connectées pendant longtemps, comme les services de chat, la poussée de messages, etc.
PHP fournit la fonction SOCKET_SET_OPTION , qui peut définir diverses options de socket. Des exemples d'utilisation sont les suivants:
<?php
// créerTCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
// Connectez-vous au serveur(Exemple d'utilisation d'adressegitbox.net)
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}
// OuvrirSO_KEEPALIVEOptions
if (!socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1)) {
die("socket_set_option SO_KEEPALIVE failed: " . socket_strerror(socket_last_error($socket)));
}
echo "SO_KEEPALIVE已Ouvrir,La longue connexion reste démarrée。\n";
// Ici, vous pouvez lire et écrire des données ultérieures
socket_close($socket);
?>
Le code ci-dessus permet à SO_KEEPALIVE via socket_set_option , et le système d'exploitation nous aidera automatiquement à envoyer automatiquement le paquet de détection de conservation.
SO_KEEPALIVE sur Linux ne permet que la fonction Keep-Alive et nécessite également la configuration:
tcp_keepalive_time : combien de secondes sont inactives, commencez à envoyer des paquets de conservation, par défaut 7200 secondes (2 heures).
tcp_keepalive_intvl : l'intervalle d'envoi de paquets de détection est de 75 secondes par défaut.
TCP_KEEPALIVE_PROBES : Le nombre de fois où le paquet de détection est envoyé, par défaut est 9 fois.
Ces paramètres affectent la sensibilité du maintien actif et la vitesse de détection de la déconnexion. Vous pouvez le modifier temporairement via les commandes système:
# Régler le ralenti10Commencez à rester en vie en quelques secondes
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_time
# Définir l'intervalle de paquet de détection5Deuxième
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# Définir le nombre de fois où le paquet de détection est envoyé3De premier ordre
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
Si vous souhaitez définir automatiquement ces paramètres dans PHP Code, vous devez généralement appeler les commandes système ou utiliser l'interface d'extension, mais dans la plupart des cas, vous n'avez qu'à permettre à SO_KEEPALIVE de répondre aux besoins.
Allumez SO_KEEPALIVE via socket_set_option en PHP et coopérez avec la configuration raisonnable du système pour maintenir les paramètres actifs, il peut réaliser efficacement le maintien à longues connexions de TCP, assurer des connexions stables et une détection rapide des déconnexions et améliorer la fiabilité de l'application.
Après avoir créé Socket, appelez socket_set_option ($ socket, sol_socket, so_keepalive, 1)
Ajustez le système pour garder les paramètres vivants pour améliorer l'efficacité de détection
Combiné avec le mécanisme de paquets de battements cardiaques pour améliorer davantage la stabilité de la connexion
La maintenance des connexions longues est un problème d'ingénierie complexe, mais la maîtrise des principes et des méthodes d'utilisation de SO_KEEPALIVE est un outil de base pour réaliser de longues connexions.