Échec de démarrage de Workerman

Phénomène 1

Après le démarrage, une erreur semblable à celle-ci se produit :

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

Mots-clés : Address already in use

Cause fondamentale : Le port est déjà utilisé, impossible de démarrer.

Solution 1

Vous pouvez utiliser la commande netstat -anp | grep numéro_de_port pour identifier quel programme utilise le port.
Ensuite, arrêtez le programme correspondant pour libérer le port.

Solution 2

Si vous ne pouvez pas arrêter le programme utilisant le port, vous pouvez résoudre le problème en changeant le port de Workerman.

Solution 3

Si c'est un port occupé par Workerman et que vous ne pouvez pas l'arrêter avec la commande stop (généralement dû àUn fichier PID manquant ou au processus principal ayant été tué par le développeur), vous pouvez tuer le processus Workerman en exécutant les deux commandes suivantes.

killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

Solution 4

S'il n'y a vraiment aucun programme écoutant sur ce port, il se peut que le développeur ait configuré Workerman pour écouter sur plusieurs ports, tous identiques. Veuillez vérifier si le script de démarrage écoute sur le même port.

Solution 5

Vérifiez si le programme a activé reusePort, essayez de désactiver reusePort.

Phénomène 2

Après le démarrage, une erreur semblable à celle-ci se produit :

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

ou

PHP Warning:  stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (在其上下文中,该请求的地址无效) in ...workerman/Worker.php on line xxxx

Mots-clés : Cannot assign requested address ou 该请求的地址无效

Raison de l'échec :

L'argument IP du script de démarrage est incorrect, ce n'est pas l'adresse IP de la machine locale. Veuillez fournir l'adresse IP de la machine locale ou utiliser 0.0.0.0 (qui signifie écouter sur toutes les adresses IP de la machine locale).

Remarque : sur les systèmes Linux, vous pouvez utiliser la commande ifconfig pour voir toutes les adresses IP de la carte réseau locale.
Si vous êtes un utilisateur de serveur cloud (Alibaba Cloud/Tencent Cloud, etc.), sachez que votre adresse IP publique est peut-être une adresse IP de proxy (par exemple, un réseau dédié d'Alibaba Cloud). L'adresse IP publique n'appartient pas au serveur actuel, donc vous ne pouvez pas écouter sur l'adresse IP publique. Bien que vous ne puissiez pas écouter sur l'adresse IP publique, vous pouvez toujours utiliser 0.0.0.0 pour lier.

Phénomène 3

Waring stream_socket_server has been disabled for security reasons in ...

Raison de l'échec :

La fonction stream_socket_server est désactivée dans le php.ini.

Solution

  1. Exécutez php --ini pour localiser le fichier php.ini.

  2. Ouvrez php.ini, localisez la section disable_functions, et supprimez stream_socket_server de la liste des fonctions désactivées.

Phénomène 4

PHP Warning:  stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)

Raison de l'échec

Pour écouter sur un port inférieur à 1024 sous Linux, des privilèges root sont nécessaires.

Solution

Utilisez un port supérieur à 1024 ou démarrez le service en tant qu'utilisateur root.