workerman-Startprobleme
Phänomen 1
Nach dem Start tritt ein Fehler auf, der folgendermaßen aussieht:
php start.php start
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (Address already in use) in ...workerman/Worker.php on line xxxx
Schlüsselwort: Address already in use
Ursache: Der Port ist belegt, der Start ist nicht möglich.
Lösung 1
Sie können den Befehl netstat -anp | grep Portnummer verwenden, um herauszufinden, welches Programm den Port belegt.
Dann stoppen Sie das entsprechende Programm, um den Port freizugeben.
Lösung 2
Wenn das entsprechende Programm, das den Port belegt, nicht gestoppt werden kann, können Sie den Port von Workerman ändern.
Lösung 3
Wenn es sich um den von Workerman belegten Port handelt und dieser nicht mit dem Befehl stop gestoppt werden kann (meistens aufgrund einer fehlenden PID-Datei oder weil der Hauptprozess vom Entwickler beendet wurde), können Sie die folgenden zwei Befehle ausführen, um den Workerman-Prozess zu beenden.
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
Lösung 4
Wenn tatsächlich kein Programm diesen Port überwacht, kann es sein, dass der Entwickler in Workerman zwei oder mehr Listener mit demselben Port eingestellt hat. Bitte überprüfen Sie, ob das Startskript denselben Port überwacht.
Lösung 5
Überprüfen Sie, ob das Programm reusePort aktiviert hat, und deaktivieren Sie reusePort.
Phänomen 2
Nach dem Start tritt ein Fehler auf, der folgendermaßen aussieht:
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (Cannot assign requested address) in ...workerman/Worker.php on line xxxx
oder
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (In seinem Kontext ist die angeforderte Adresse ungültig) in ...workerman/Worker.php on line xxxx
Schlüsselwort: Cannot assign requested address oder die angeforderte Adresse ist ungültig
Fehlerursache:
Der IP-Parameter im Startskript ist falsch geschrieben, es ist nicht die lokale IP. Bitte geben Sie die lokale IP oder 0.0.0.0 (was bedeutet, dass alle IPs der lokalen Maschine überwacht werden) an, um das Problem zu lösen.
Hinweis: Unter Linux können Sie mit dem Befehl ifconfig alle IPs der Netzwerkinterfaces auf der lokalen Maschine anzeigen.
Wenn Sie ein Cloud-Server-Nutzer (Alibaba Cloud / Tencent Cloud usw.) sind, beachten Sie, dass Ihre öffentliche IP möglicherweise eine Proxy-IP ist (z. B. das exklusive Netzwerk von Alibaba), und dass die öffentliche IP nicht zur aktuellen Serverkonfiguration gehört, weshalb kein Hören über die öffentliche IP möglich ist. Obwohl das Hören über die öffentliche IP nicht möglich ist, kann jedoch weiterhin auf 0.0.0.0 zugebunden werden.
Phänomen 3
Waring stream_socket_server has been disabled for security reasons in ...
Fehlerursache:
Die Funktion stream_socket_server ist in der php.ini deaktiviert.
Lösungsmethode
-
Führen Sie
php --iniaus, um die php.ini-Datei zu finden. -
Öffnen Sie die php.ini und suchen Sie den Eintrag disable_functions, und entfernen Sie den Eintrag stream_socket_server.
Phänomen 4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)
Fehlerursache
Unter Linux benötigt das Hören auf Ports unter 1024 Root-Rechte.
Lösungsmethode
Verwenden Sie einen Port größer als 1024 oder starten Sie den Dienst mit dem Benutzer root.