× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Client

异步非阻塞客户端,回调式编程的风格。

onConnect

客户端连接服务器成功后会回调此函数。

function onConnect(Client $client)
  • TCP客户端必须设置onConnect回调
  • UDP客户端可选设置onConnectsocket创建成功会立即回调onConnect

onError

连接服务器失败时会回调此函数。

function onError(Client $client)
  • UDP客户端没有onError回调

onReceive

客户端收到来自于服务器端的数据时会回调此函数

function onReceive(Client $client, string $data)
  • $data 是服务器端发送的数据,可以为文本或者二进制内容
  • 启用了eof/length检测后,onReceive一定会收到一个完整的数据包

onClose

连接被关闭时回调此函数。

function onClose(Client $client)
  • Server端关闭或Client端主动关闭都会触发onClose事件

onBufferFull

当缓存区达到最高水位时触发此事件。

function onBufferFull(Client $cli);
  • 设置client->buffer_high_watermark选项来控制缓存区高水位线
  • 触发onBufferFull表明发送队列已触顶即将塞满,不能再向服务器端发送数据

onBufferEmpty

当缓存区低于最低水位线时触发此事件。

function onBufferEmpty(Client $cli);
  • 设置client->buffer_low_watermark来控制缓存区低水位线
  • 触发此事件后,表明当前发送队列中的数据已被发出,可以继续向服务器端发送数据

使用实例

use Swoole\Async\Client;

$client = new Client(SWOOLE_SOCK_TCP);

$client->on("connect", function(Client $cli) {
    $cli->send("GET / HTTP/1.1\r\n\r\n");
});
$client->on("receive", function(Client $cli, $data){
    echo "Receive: $data";
    $cli->send(str_repeat('A', 100)."\n");
    sleep(1);
});
$client->on("error", function(Client $cli){
    echo "error\n";
});
$client->on("close", function(Client $cli){
    echo "Connection close\n";
});
$client->connect('127.0.0.1', 9501);

异步客户端只能使用在cli命令行环境



  • K.O

    为啥我总是报错: PHP Fatal error: Uncaught Error: Class 'Swoole\Async\Client' not found 有人遇到过吗

  • donald

    @K.O 这个已经移到ext-async模块了,需要单独安装或者编译https://github.com/swoole/ext-async

  • K.O

    @唐纳德,谢谢!那他这个文档要更新啊!上面的示例就是Swoole\Async\Client;不仅示例要改,还要在异步这里注明要安装ext-async模块。