最近工作中有一些关于swoole的问题解决不了,所以打算系统的学习一下swoole。
刚开始第一步创建服务端和客户端,就遇到客户端程序始终连不上服务端的问题。
起初报如下错误:
PHP Fatal error: Swoole\Client::__construct(): please install the ext-async extension, using Swoole\Async\Client in /opt/study/client.php on line 3
这是因为程序创建的客户端,用了异步参数,而且代码是swoole4.4版本的,说是在swoole4.5版本下异步客户端创建方式有调整,具体调整啥,暂且不管了,先就直接用同步参数了。
$client = new Swoole\Client(SWOOLE_SOCK_TCP);
swoole tcp服务端程序如下:
$serv = new Swoole\Server("127.0.0.1", 6400); $serv->set([ 'work_num' => 2 ]); //监听连接进入事件 $serv->on('Connect', function ($serv, $fd) { echo "Client: Connect.\n"; });
启动tcp服务后,用netstat -anop查看,9501端口是处于监听状态的,可是client程序connect却总提示失败。
阿里云服务器里安全组,我也是针对任意ip创建了9501端口的入方向规则。
实在没辙,换个6400端口,结果一样,都是报连接失败的提示:
PHP Warning: Swoole\Client::connect(): connect to server[47.115.1.192:9502] failed, Error: Connection refused[111] in /opt/study/client.php on line 5
无可奈何,最后只好在阿里云里提交工单了。结果是要求服务端ip,必须要用0.0.0.0,而不是127.0.0.1。经过测试,果然可以了。至于为何,懒得追究了。