注意
异步客户端只能用于cli环境
Client代码(会不断完善补充)
同步client
/**
* connect/send/recv 这些方法会等待IO完成后再返回
* 所以只要你用了就是同步客户端,服务端返回了才会往下执行
* 同步阻塞操作并不消耗CPU资源,IO操作未完成当前进程会自动转入sleep模式,
* 当IO完成后操作系统会唤醒当前进程,继续向下执行代码。
* */
$client = new swoole_client(SWOOLE_SOCK_TCP);
//connect的1代表的是整个与服务端交互的超时时间,超过这个时间会自动断开
if (!$client->connect('127.0.0.1',9999, 1)){
die("connect failed.");
}
if (!$client->send('hello world')){
die("send failed.");
}
//从服务器接收数据,如果是超时的错误,这种方式捕获不了,会报PHP Warning
if (!$data = $client->recv()){
die("recv failed.");
}
echo $data;
//关闭连接
$client->close();
异步Client
/**
* **异步客户端必须设置onConnect、onError、onReceive、onClose
* */
$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);
//连接成功回调
$client->on('connect', function ($cli){
//向服务端发送信息
$cli->send("hello world\n");
});
//数据接收回调
$client->on('receive', function ($cli,$data){
echo "Received: ".$data."\n";
});
//连接失败回调
$client->on('error',function($cli){
echo "Connect failed\n";
});
//注册连接关闭回调
$client->on("close", function($cli){
echo "Connection close\n";
});
//发起连接的操作会立即返回,继续执行下面的代码
$client->connect('127.0.0.1', 9999,0.5);
echo '已经完成异步发送'.PHP_EOL;