Coroutine\Client [编辑本页]

Swoole\Coroutine\Client提供了TCPUDP传输协议Socket客户端的封装代码,使用时仅需new Swoole\Coroutine\Client即可。

  • Swoole\Coroutine\Client底层实现协程调度,业务层无需感知
  • 使用方法和Swoole\Client同步模式方法完全一致
  • connect超时设置同时作用于ConnectRecvSend 超时
  • 除了正常的调用外,Swoole\Coroutine\Client还支持并行请求。
  • 使用方法和Swoole\Client一致的此处不再列出,请参考 swoole\Client,对于使用有区别的函数,此处单独说明

协程版实例

$client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
    exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("hello world\n");
echo $client->recv();
$client->close();

方法列表

1. connect

连接到远程服务器,函数原型:

bool $swoole_client->connect(string $host, int $port, float $timeout = 0.1, int $flag = 0)

connect方法接受4个参数:

  • $host是远程服务器的地址
  • $port是远程服务器端口
  • $timeout是网络IO的超时,包括connect/send/recv,单位是s,支持浮点数。默认为0.1s,即100ms,超时发生时,连接会被自动close掉
  • $flag参数在UDP类型时表示是否启用udp_connect, 设定此选项后将绑定$host与$port,此UDP将会丢弃非指定host/port的数据包。
  • $flag参数在TCP类型,$flag=1表示设置为非阻塞socket,connect会立即返回。如果将$flag设置为1,那么在send/recv前必须使用swoole_client_select来检测是否完成了连接

原先异步客户端不支持recv超时,现在协程版已经支持超时,复用上面的$timeout参数


connect不会发生阻塞,connect事件触发后,切回PHP上下文。

if ($cli->connect('127.0.0.1', 9501)) {
      $cli->send("data");
} else {
      echo "connect failed.";
}

如果连接失败,会返回false

超时后返回,检查$cli->errCode为110

2. send

发送数据,函数原型为

$client->send($data);

3. recv

接受服务端数据返回,此时会发生协程的切出

4. close

关闭客户端连接