常见问题
端口占用
出现类似 WARNING swSocket_bind(:483): bind(0.0.0.0:9501) failed, Error: Address already in use[98]
如下错误,可判定为端口被占用。
可以通过 lsof
命令来查询端口占用
> lsof -i:9501
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 57 root 3u IPv4 1744902 0t0 TCP *:9501 (LISTEN)
可以根据返回的 pid
使用 kill
命令来关闭占用端口的相关进程
> kill -9 57
也可以通过修改 easyswoole
的监听端口的方式启动 easyswoole
的服务,修改文件在dev.php(线上环境则应在produce.php)中
<?php
return [
'SERVER_NAME' => "EasySwoole",
'MAIN_SERVER' => [
'LISTEN_ADDRESS' => '0.0.0.0',
'PORT' => 9501, // 此处修改 easyswoole 监听端口号
...
],
'TEMP_DIR' => null,
'LOG_DIR' => null
];
然后重新启动服务,即可成功启动服务。
Socket 监听失败
- 判断是否为端口占用所导致的监听失败,这里还是采用
lsof
命令来查看端口
> lsof -i:9501
1024
以下端口需要root
权限监听,所以这里要特别注意
外网无法访问
注意:当服务成功启动后,如果外网无法访问,可以使用 telnet
客户端查看对应的端口是否开放成功,前提是首先环境得有 telnet
客户端 (具体如何安装 telnet
客户端请用户自行百度谷歌查询),检查端口开放命令如下:telnet 公网ip/内网ip 端口号
,例如:telnet 192.168.0.1 9501
。端口开放成功,则会立刻跳转,不成功,则会有对应的提示。用户可根据对应的提示进行判断。
检查服务监听端口是否为
0.0.0.0
检查防火墙是否对外开放
> netstat -anp
// 如果相关端口被防火墙拦截,需要放开
> firewall-cmd --zone=public --add-port=9501/tcp --permanent
如果为阿里云、腾讯云等云服务器,请检查服务器安全组是否放行对应端口。同样可以使用上述注意事项的 telnet
客户端自行检查。
以上 shell
命令适用于 centos 7
,其它 linux
发行版请自行查找相关命令。
请求数据时 DNS 报错
- 原因:有时会发现在使用
Swoole
的MySQL、HttpClient、Redis
等客户端发送请求时,出现了DNS
错误,类似于DNS Lookup resolve failed...
错误,这是由于Swoole
底层对一些DNS
不是很友好。 - 解决方法:建议使用阿里云公共
DNS
,具体如何配置阿里云公共DNS
,请看 https://www.alidns.com/knowledge?type=SETTING_DOCS#user_linux
当前内容版权归 EasySwoole 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 EasySwoole .