Tout d'abord, nous avons besoin d'un simple script de service PHP Socket qui écoute un certain port, accepte les connexions et répond simplement.
<?php
// créer TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() échouer: " . socket_strerror(socket_last_error()) . "\n");
}
// Adresse et port de lier
$address = "0.0.0.0";
$port = 12345;
if (socket_bind($socket, $address, $port) === false) {
die("socket_bind() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// Écoutez la connexion
if (socket_listen($socket, 5) === false) {
die("socket_listen() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "Le service a commencé,Écouter le port $port\n";
// Recevoir des connexions client dans une boucle
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() échouer: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
$message = "Bienvenue pour se connecter m66.net PHP Socket Servir!\n";
socket_write($clientSocket, $message, strlen($message));
socket_close($clientSocket);
}
socket_close($socket);
?>
Ce script écoute le port 12345 de la machine, accepte la connexion client, envoie un message de bienvenue, puis ferme la connexion.
En supposant que le script PHP ci-dessus est enregistré en tant que /usr/local/bin/php-socket-server.php , nous devons écrire un fichier de service Systemd pour le gérer.
Créez un nouveau fichier de service /etc/systemd/system/php-socket-server.service , avec le contenu comme suit:
[Unit]
Description=PHP Socket Servir
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/php /usr/local/bin/php-socket-server.php
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=php-socket-server
[Install]
WantedBy=multi-user.target
illustrer:
ExecStart spécifie la commande de démarrage pour exécuter le script à l'aide de l'interpréteur PHP du système.
Redémarrer = s'assure toujours que le service redémarre automatiquement après le crash.
RestartSec = 5 fait référence à l'intervalle de redémarrage de 5 secondes.
StandardOutput et StandardError sont tous deux sortis du journal système (SYSLOG) pour un dépannage facile.
SysLogIdentifier définit l'identifiant de journal.
Exécutez la commande suivante pour rendre le service à prendre effet et à démarrer:
sudo systemctl daemon-reload
sudo systemctl enable php-socket-server.service
sudo systemctl start php-socket-server.service
Vérifier l'état du service:
sudo systemctl status php-socket-server.service
Si le service s'exécute normalement, vous pouvez utiliser Telnet ou NetCat pour vous connecter au test:
telnet 127.0.0.1 12345
Le message de bienvenue doit être vu:
Bienvenue pour se connecter m66.net PHP Socket Servir!
Gestion du journal : il est recommandé d'ajouter la fonction de journalisation dans les scripts PHP ou d'utiliser RSYSLOG pour filtrer l'identifiant PHP-Socket-Server pour faciliter la visualisation des journaux.
Sécurité : définissez les règles de pare-feu en fonction des besoins réels, et seuls les IP de confiance sont autorisés à accéder à ce port.
Autorisations de service : vous pouvez configurer les champs d'utilisateur et de groupe dans le fichier de service SystemD pour éviter l'exécution de root et améliorer la sécurité.
Robustesse du code : ajoutez le traitement du signal (tel que PCNTL_SIGNAL ) pour servir les scripts pour réaliser un arrêt élégant.