在workerman开发过程中,遇到了很多问题,我都总结了一下,与大家分享:如果还不懂的,建议去看看这套教程,希望能帮助到你!
1 workerman无法正常访问
问题描述:在阿里云ECS上部署了workerman的应用(ECS是专有网络),在ECS安全组里已经允许workerman需要的全部端口,但是外网一直不能正常打开(注,其他服务,比80端口外部是可以用访问的)。telnet连接显示“No route to host”,而且我是关闭了centos7的firewalld防火墙的,这让我很困惑。
问题原因:
因为对centos7了解不多,关闭firewalld.service后,并没有关闭iptable.service导致的。
解决问题:
1、安全组入方向,设置workerman 的端口范围;
2、关闭firewalld防火墙和修改/etc/sysconfig/iptables规则。
2 workerman 不能关闭怎么办
问题描述:启动脚本里执行Worker::stopAll()并不能停止workerman,Worker::stopAll()只有在运行workerman的主进程里执行才有效,外部其它进程执行没有效果。
停止Workerman的流程是
1、找到Workerman主进程pid
2、给pid发送SIGINT信号(posix_kill(SIGINT, pid))
3、workerman主进程收到SIGINT信号后自身执行Worker::stopAll()完成服务停止。
这三个步骤workerman内部应封装好,调用流程是
1、设置$argv = 'stop';
2、运行Worker::runAll();
3 workerman无法使用怎么办
问题描述:启动后报错类似如下: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
失败原因:端口被占用,无法启动。
可以通过命令netstat -anp | grep 端口号来找出哪个程序占用了端口。然后停止对应的程序释放端口解决。
如果不能停止对应端口的程序&#x