PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了与大家分享一下,在workerman开发中遇到的问题与解决方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在workeRMAN开发过程中,遇到了很多问题,我都总结了一下,与大家分享:如果还不懂的,建议去看看这套教程,希望能帮助到你!

Think@L_607_1@5与workeRMAN实战—在线客服
链接http://www.mano100.cn/thread-158-1-1.html


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无法使用怎么办
问题描述:启动后报错类似如下:@L_607_1@ start.@L_607_1@ start

@L_607_1@ Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (Address already in usE) 
in ...workeRMAN/Worker.@L_607_1@ on line xxxx
关键字:Address already in use


失败原因:端口被占用,无法启动。
可以通过命令netstat -anp | grep 端口号来找出哪个程序占用了端口。然后停止对应的程序释放端口解决

如果不能停止对应端口的程序,可以通过更换workeRMAN的端口解决

如果是WorkeRMAN占用的端口,又无法通过stop命令停止(一般是丢失pid文件或者主进程被开发者kill了导致),可以通过运行以下两个命令杀死WorkeRMAN进程。

kill all @L_607_1@
ps aux|grep WorkeRMAN|awk '{print $2}'|xargs kill -9


如果确实没有程序监听这个端口,那么可能是开发者在workeRMAN里设置了两个或两个以上的监听,并且监听的端口相同导致,请开发者自行检查启动脚本是否监听了相同的端口。


现象2
启动后报错类似如下:

@L_607_1@ Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (CAnnot assign requested address) in ...
workeRMAN/Worker.@L_607_1@ on line xxxx

或者

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

关键字:CAnnot assign requested address或者该请求的地址无效

失败原因:
启动脚本监听ip参数写错,不是本机IP,请填写本机IP机或者填写 0.0.0.0(表示监听本机所有ip)即可解决

提示:Linux系统可以通过命令 ifconfig查看本机所有网卡ip。
如果您是云服务器(阿里云/腾讯云等)用户,注意您的公网ip实际可能是个代理ip(例如阿里云的专有网络),公网ip并不属于当前的服务器,所以无法通过公网ip监听。然不能用公网ip监听,但是仍然可以通过0.0.0.0来绑定。


现象3

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


失败原因:
stream_socket_server 函数被@L_607_1@.ini禁用

解决方法
1、运行@L_607_1@ --ini 找到@L_607_1@.ini文件
2、打开@L_607_1@.ini找到disable_functions一项,将stream_socket_server禁用项删掉


现象4

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


失败原因
linux下监听端口如果小于1024,需要root权限。

解决办法
使用大于1024的端口或者使用root用户启动服务。

4 workeRMAN可以一直运行么
workeRMAN可以一直运行,以daemon(守护进程)方式启动workeRMAN即可后台一直运行。

启动停止workeRMAN
启动
以debug(调试)方式启动

@L_607_1@ start.@L_607_1@ start


以daemon(守护进程)方式启动

@L_607_1@ start.@L_607_1@ start -d


停止

@L_607_1@ start.@L_607_1@ stop


重启

@L_607_1@ start.@L_607_1@ restart


平滑重启

@L_607_1@ start.@L_607_1@ reload


查看状态

@L_607_1@ start.@L_607_1@ status


debug和daemon方式区别:
1、以debug方式启动,代码中echo、var_dump、print等打印函数会直接输出在终端。
2、以daemon方式启动,代码中echo、var_dump、print等打印会重定向到/dev/null文件,可以通过设置Worker::$stdoutFile = '/your/path/file';来设置这个文件路径。
3、以debug方式启动,终端关闭后workeRMAN会随之关闭退出
4、以daemon方式启动,终端关闭后workeRMAN继续后台正常运行。



5 workeRMAN无法socket怎么办
WorkeRMAN是一款纯@L_607_1@开发的开源高性能的@L_607_1@ socket 服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。但是在配置workeRMAN情况下,不免有些意想不到的错误,下面小编整理网上资料并整合自身遇到的问题,给出以下几种常用的解决方案。

问题描述:
现象1
启动后报错类似如下:

@L_607_1@ start.@L_607_1@ start
@L_607_1@ Warning:  stream_socket_server(): unable to connect totcp://xx.xx.xx.xx:xxxx (Address already in usE) 
in /home/workeRMAN-chat/WorkeRMAN/Worker.@L_607_1@ on line xxxx

关键字:Address already in use


失败原因:端口被占用,无法启动。
可以通过命令netstat -anp | grep 端口号来找出哪个程序占用了端口。
然后停止对应的程序释放端口解决


如果不能停止对应端口的程序,可以通过更换workeRMAN的端口解决
如果是WorkeRMAN占用的端口,又无法通过stop命令停止(一般是丢失pid文件或者主进程被开发者kill了导致),可以通过运行以下两个命令杀死WorkeRMAN进程。

`kill all @L_607_1@
ps aux|grep WorkeRMAN|awk '{print $2}'|xargs kill -9`


现象2
启动后报错类似如下:

@L_607_1@ Warning:  stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (CAnnot assign requested address) 
in /home/GatewayWorker/WorkeRMAN/Worker.@L_607_1@ on line xxxx

关键字:CAnnot assign requested address

失败原因:
启动脚本ip参数写错,不是本机IP,请填写本机IP机或者填写 0.0.0.0(表示监听本机所有ip)即可解决

提示:Linux系统可以通过命令 ifconfig查看本机所有网卡ip。

如果您是腾讯云用户,注意您的公网ip实际是代理服务器ip,公网ip并不属于你的服务器,所以无法通过公网ip绑定,但是可以通过0.0.0.0来绑定。

现象3
启动后报错类似如下:

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


失败原因:
stream_socket_server 函数被@L_607_1@.ini禁用

解决方法
1、运行@L_607_1@ --ini 找到@L_607_1@.ini文件
2、打开@L_607_1@.ini找到disable_functions一项,将stream_socket_server禁用项删掉

现象4
启动后报错类似如下:

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


失败原因
linux下监听端口如果小于1024,需要root权限。

解决办法
使用大于1024的端口或者使用root用户启动服务。

现象5
启动后报错类似如下:

WebSocket connection to 'ws://x.x.x.x:2346/'Failed
Error in connection establishment:net::ERR_NAME_NOT_TIMED_OUT


失败原因
服务器防火墙挡住了设置的端口,这里于2346为例。

解决办法
进入Linux vim编辑服务器防火墙文件添加你需要开发的服务器端口保存后重启防火墙。

[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# iptables -nvl #查看允许访问的端口
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# vim /etc/sysconfig/iptables #编辑
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# /etc/init.d/iptables restart #重启


6  workeRMAN无法监听怎么办
问题描述:根据手册一步一步走下来,但是发现在启动监听的时候,发生了错误

[thinkexceptionThrowableError]
Fatal error: Call to undefined **function**WorkeRMANLibpcntl_signal()

本地运行环境:win10+@L_607_1@7,已经用composer下载了workeRMAN-for-win了


解决办法:
如果是在windows下面composer安装的话,在文档第一步
composer **require**topthink/think-worker
的时候,它还会顺带下载workeRMAN/workeRMAN,但是因为是在windows下面运行,所以要删除掉workeRMAN/workeRMAN,再进行下一步。
workeRMAN/workeRMAN-**for**-win

这时,你再启动监听就可以了!

大佬总结

以上是大佬教程为你收集整理的与大家分享一下,在workerman开发中遇到的问题与解决方法全部内容,希望文章能够帮你解决与大家分享一下,在workerman开发中遇到的问题与解决方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: