workerman başlatma hatası
Belirti 1
Başlatıldıktan sonra aşağıdaki gibi bir hata alırsınız:
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
Anahtar kelime: Address already in use
Temel neden: Portun kullanımda olması, başlatma işleminin gerçekleştirilememesi.
Çözüm 1
Hangi programın portu kullandığını bulmak için netstat -anp | grep port_numarası komutunu kullanabilirsiniz.
Sonrasında, ilgili programı durdurarak portu serbest bırakabilirsiniz.
Çözüm 2
Eğer ilgili portu kullanan programı durduramıyorsanız, workerman'ın portunu değiştirerek çözebilirsiniz.
Çözüm 3
Eğer Workerman tarafından kullanılan portta durdurma komutu ile durdurulamıyorsa (genellikle pid dosyasının kaybolması veya ana sürecin geliştirici tarafından sonlandırılması nedeniyle), aşağıdaki iki komutu çalıştırarak Workerman sürecini öldürebilirsiniz.
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
Çözüm 4
Eğer gerçekten bu portta dinleyen bir program yoksa, geliştirici workerman içinde iki veya daha fazla dinleyici ayarlamış ve dinleyicilerin portları aynı olduğu için bu durum meydana gelebilir. Geliştiricilerin başlatma betiklerini kontrol edip aynı portu dinleyip dinlemediğini kontrol etmesi gerekmektedir.
Çözüm 5
Programın reusePort'u açıp açmadığını kontrol edin, reusePort'u kapatmayı deneyin.
Belirti 2
Başlatıldıktan sonra aşağıdaki gibi bir hata alırsınız:
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
veya
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (在其上下文中,该请求的地址无效) in ...workerman/Worker.php on line xxxx
Anahtar kelime: Cannot assign requested address veya 该请求的地址无效
Başarısızlık nedeni:
Başlatma betiğinde dinleme ip parametresinin yanlış yazılması, yerel ip değilse, yerel ip adresinizi veya 0.0.0.0 (tüm yerel ip'leri dinlemek için) yazmanız yeterlidir.
İpucu: Linux sisteminde, yerel ağ kartlarınızın ip adreslerini görmek için ifconfig komutunu kullanabilirsiniz.
Eğer bir bulut sunucu (Alibaba Cloud/Tencent Cloud vb.) kullanıcısıysanız, dikkat edin ki genel ip adresiniz aslında bir proxy ip olabilir (örneğin Alibaba Cloud'un özel ağı), genel ip'nin mevcut sunucuya ait olmadığını unutmayın, bu nedenle genel ip ile dinleme yapılamaz. Genel ip ile dinleme yapılamasa da, yine de 0.0.0.0 kullanarak bağlanabilirsiniz.
Belirti 3
Waring stream_socket_server has been disabled for security reasons in ...
Başarısızlık nedeni:
stream_socket_server fonksiyonu php.ini'de devre dışı bırakılmış.
Çözüm yolu
-
php --inikomutunu çalıştırarak php.ini dosyasını bulun. -
php.ini'yi açın ve disable_functions bölümünde stream_socket_server'a dair devre dışı bırakma maddesini silin.
Belirti 4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)
Başarısızlık nedeni
Linux'ta dinlenen port 1024'ten küçükse, root izinleri gereklidir.
Çözüm yolu
1024'ten büyük bir port kullanın veya servisi root kullanıcısı ile başlatın.