Zunächst benötigen wir ein einfaches PHP -Socket -Service -Skript, das einem bestimmten Port zuhört, Verbindungen akzeptiert und einfach antwortet.
<?php
// erstellen TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() scheitern: " . socket_strerror(socket_last_error()) . "\n");
}
// Adresse und Port binden
$address = "0.0.0.0";
$port = 12345;
if (socket_bind($socket, $address, $port) === false) {
die("socket_bind() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// Hören Sie sich die Verbindung an
if (socket_listen($socket, 5) === false) {
die("socket_listen() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "Service begann,Hören Sie sich Port an $port\n";
// Erhalten Sie Client -Verbindungen in einer Schleife
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
$message = "Willkommen bei Connect m66.net PHP Socket Aufschlag!\n";
socket_write($clientSocket, $message, strlen($message));
socket_close($clientSocket);
}
socket_close($socket);
?>
Dieses Skript hört auf den 12345 -Port des Geräts, akzeptiert die Client -Verbindung, sendet eine willkommene Nachricht und schließt dann die Verbindung.
Unter der Annahme, dass das obige PHP-Skript als /USR/local/bin/php-socket-server.php gespeichert wird, müssen wir eine Systemd-Dienstdatei schreiben, um sie zu verwalten.
Erstellen Sie mit dem Inhalt wie folgt eine neue Servicedatei /etc/systemd/System/Php-Socket-Server.service :
[Unit]
Description=PHP Socket Aufschlag
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
veranschaulichen:
ExecStart gibt den Startbefehl an, um das Skript mit dem PHP -Interpreter des Systems auszuführen.
Neustart = stellt immer sicher, dass der Dienst nach dem Absturz automatisch neu gestartet wird.
Neustartsec = 5 bezieht sich auf das 5 -Sekunden -Intervall des Neustarts.
StandardOutput als auch StandardError werden für eine einfache Fehlerbehebung an das Systemprotokoll (Syslog) ausgegeben.
Syslogidentifier legt die Protokollkennung fest.
Führen Sie den folgenden Befehl aus, um den Dienst in Kraft zu setzen und zu starten:
sudo systemctl daemon-reload
sudo systemctl enable php-socket-server.service
sudo systemctl start php-socket-server.service
Service Status überprüfen:
sudo systemctl status php-socket-server.service
Wenn der Dienst normal ausgeführt wird, können Sie Telnet oder NetCat verwenden, um eine Verbindung zum Test herzustellen:
telnet 127.0.0.1 12345
Willkommensnachricht sollte gesehen werden:
Willkommen bei Connect m66.net PHP Socket Aufschlag!
Protokollverwaltung : Es wird empfohlen, die Protokollierungsfunktion in PHP-Skripten hinzuzufügen oder mit RSYSLOG die Kennung von PHP-Socket-Server zu filtern, um die Anzeige von Protokollen zu erleichtern.
Sicherheit : Festlegen von Firewall -Regeln entsprechend den tatsächlichen Bedürfnissen, und nur vertrauenswürdige IPs dürfen auf diesen Port zugreifen.
Serviceberechtigungen : Sie können die Benutzer- und Gruppenfelder in der Systemd -Dienstdatei konfigurieren, um das Ausführen als Stammverkehr zu vermeiden und die Sicherheit zu verbessern.
Code -Robustheit : Signalverarbeitung (z. B. pcntl_signal ) zu Service -Skripten hinzufügen, um ein elegantes Herunterfahren zu erreichen.