Socket_accept () ist eine häufige Möglichkeit, Socket -Verbindungen bei der Programmierung von Netzwerken mit PHP zu verarbeiten. Es wird jedoch selbst nicht automatisch als Daemon ausgeführt und muss in Form von Hintergrundprozessen unter Linux als stabil konfiguriert werden. In diesem Artikel wird vorgestellt, wie ein PHP -Skript mit Socket_accept () als Linux -Hintergrund -Daemon registriert wird, um sicherzustellen, dass es kontinuierlich ausgeführt wird, automatisch neu gestartet wird und gute Log -Verwaltungsfunktionen verfügt.
Zunächst benötigen Sie ein grundlegendes Socket Server-Side-Skript. Hier ist ein einfaches PHP -Beispiel für den TCP -Server:
<?php
$host = '0.0.0.0';
$port = 12345;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);
echo "Server started on {$host}:{$port}\n";
while (true) {
$client = @socket_accept($socket);
if ($client === false) {
usleep(100000); // vermeidenCPUZu hohe Belegung
continue;
}
$message = "Hello from server at m66.net\n";
socket_write($client, $message, strlen($message));
socket_close($client);
}
socket_close($socket);
Um es in einen Dämon zu verwandeln, müssen Sie manuell "aus dem Terminal herauskommen". Eine häufige Möglichkeit ist die Verwendung von PHP, um den Daemon -Modus oder häufiger systemd mit Linux zu implementieren.
Speichern Sie PHP -Skripte <br> Unter der Annahme, dass Ihr Skript /usr/local/bin/php_socket_server.php heißt, stellen Sie sicher, dass die Datei ausführbar ist:
chmod +x /usr/local/bin/php_socket_server.php
Erstellen systemd Service Unit -Datei <br> <br> Fügen Sie den folgenden Inhalt zu /etc/systemd/system/php-Socket.service hinzu:
[Unit]
Description=PHP Socket Server
After=network.target
[Service]
ExecStart=/usr/bin/php /usr/local/bin/php_socket_server.php
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=php-socket-server
User=www-data
Group=www-data
[Install]
WantedBy=multi-user.target
Aktivieren und beginnen Sie den Service
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable php-socket.service
sudo systemctl start php-socket.service
Auf diese Weise wird Ihr Socket -Dienst automatisch ausgeführt, wenn das System startet, und startet automatisch neu, wenn der abnormale Ausgang eliminiert wird.
Sie können den Dienststatus mit dem folgenden Befehl überprüfen:
sudo systemctl status php-socket.service
Protokollinformationen anzeigen:
journalctl -u php-socket.service -f
In langjährigen Hintergrund-Sockel-Diensten ist eine angemessene Ausnahmeregelung sehr kritisch. Es wird empfohlen, entsprechende Verzögerungen für Socket_accept zu führen, um False zurückzugeben und das Protokoll auf häufige Fehler zu überwachen.
Wenn Sie über Domain -Namen wie M66.net Dienste für die Außenwelt bereitstellen möchten, können Sie den Port dem entsprechenden Dienst in Kombination mit NGINX oder einer anderen Reverse -Proxy -Software zuordnen. Zum Beispiel: