فشل تشغيل Workerman
الظاهرة 1
بعد البدء، يظهر خطأ مشابه لما يلي:
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
الكلمة المفتاحية: Address already in use
السبب الجذري: المنفذ مشغول، مما يمنع التشغيل.
الحل 1
يمكنك استخدام الأمر netstat -anp | grep رقم_المنفذ لمعرفة أي برنامج يشغل المنفذ.
ثم قم بإيقاف البرنامج المعني لتحرير المنفذ.
الحل 2
إذا لم تتمكن من إيقاف البرنامج الذي يشغل المنفذ، يمكنك حل المشكلة عن طريق تغيير منفذ Workerman.
الحل 3
إذا كان المنفذ مشغولاً بواسطة Workerman، ولم تتمكن من إيقافه باستخدام أمر stop (عادة ما يكون بسبب فقدان ملف pid أو تم قتل العملية الرئيسية بواسطة المطور)، يمكنك تشغيل الأوامر التالية لقتل عملية Workerman.
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
الحل 4
إذا لم يكن هناك برنامج يستمع لهذا المنفذ، فقد يكون المطور قد أعد أكثر من اثنين من نقاط الاستماع في workerman، وكانت نقاط الاستماع تستخدم نفس المنفذ. يرجى من المطور فحص نص البدء للتأكد من عدم استماع نفس المنفذ مرتين.
الحل 5
تحقق مما إذا كان البرنامج قد قام بتفعيل reusePort، ثم حاول إيقاف reusePort.
الظاهرة 2
بعد البدء، يظهر خطأ مشابه لما يلي:
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
أو
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (在其上下文中,该请求的地址无效) in ...workerman/Worker.php on line xxxx
الكلمة المفتاحية: Cannot assign requested address أو 该请求的地址无效
سبب الفشل:
تم كتابة معلمة ip في نص البدء بشكل خاطئ، ليس عنوان ip المحلي، يرجى إدخال عنوان ip المحلي أو استخدام 0.0.0.0 (يعني الاستماع لجميع عنوان ip المحلي) لحل المشكلة.
تنبيه: يمكن أن تستخدم أنظمة Linux الأمر ifconfig لعرض جميع عناوين ip لبطاقات الشبكة المحلية.
إذا كنت مستخدم لخادم سحابي (مثل Alibaba Cloud / Tencent Cloud)، انتبه إلى أن عنوان ip العام الخاص بك قد يكون عنوان ip وكيل (مثل الشبكة الخاصة لـ Alibaba Cloud)، لذا فإن عنوان ip العام لا ينتمي إلى الخادم الحالي، وبالتالي لا يمكن الاستماع باستخدام عنوان ip العام. على الرغم من أنه لا يمكن استخدام عنوان ip العام، إلا أنه لا يزال يمكنك الربط باستخدام 0.0.0.0.
الظاهرة 3
Waring stream_socket_server has been disabled for security reasons in ...
سبب الفشل:
تم تعطيل دالة stream_socket_server في php.ini.
طريقة الحل
-
تشغيل
php --iniللعثور على ملف php.ini. -
فتح php.ini والعثور على item disable_functions، وإزالة item stream_socket_server من القائمة.
الظاهرة 4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)
سبب الفشل
إذا كان port أقل من 1024 على Linux، سيحتاج الأمر إلى صلاحيات الجذر.
طريقة الحل
استخدم منفذًا أكبر من 1024 أو استخدم مستخدم root لبدء الخدمة.