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

Client->on

注册异步事件回调函数。

function Client->on(string $event, mixed $callback) : bool;
  • 参数1为事件类型,支持connect/error/receive/close 4种
  • 参数2为回调函数,可以是函数名字符串、匿名函数、类静态方法、对象方法

调用Swoole\Async\Client->close()时会自动退出事件循环
UDP协议的connect事件在执行完connect方法后立即被回调 UDP没有close事件

UDP客户端

UDP没有连接和关闭的概念,因此

  • onConnect事件会在UDP客户端创建后立即执行
  • onClose事件会在UDP客户端close时立即执行

使用示例

$client = new Swoole\Async\Client(SWOOLE_TCP | SWOOLE_ASYNC); //异步非阻塞

$client->on("connect", function($cli) {
    $cli->send("hello world\n");
});

$client->on("receive", function($cli, $data) {
        echo "received: $data\n";
        sleep(1);
        $cli->send("hello\n");
});

$client->on("close", function($cli){
    echo "closed\n";
});

$client->on("error", function($cli){
    exit("error\n");
});

$client->connect('127.0.0.1', 9501, 0.5);

  • yuankess

    回调函数不接受外部传参么?

  • 具鸟

    client的回调函数,是否只有connect,receive,close,error

  • 桄欣

    没有外部参数支持,如果需要可以在callback的闭包中用use声明访问外部变量,详见PHP手册关于闭包的使用

  • 鬼眼

    onError的时候如果可以设定一个自动重连,完了继续刚才状态的功能就好了。

  • kid

    这个例子必须要客户端调用么? 网页上调用 报Fatal error: swoole_client::__construct(): async-io must use in cli environment.

  • Lin.杰

    $client->on("receive", callback); 当有大数据的时候 会调用多次?

  • 18565659920

    回复 Lin.杰

    onReceive的调用会根据你的配置而有不同的的调用次数,如果什么都没设置,那么底层TCP接收到一个封包,就调用一次onReceive,如果使用了package配置去管理完整封包,那么每当计算出有一个完整的封包时才调用一次onReceive