13 April 2016

swoole_client的实现源码主要在swoole-src/swoole_client.c中。

swoole_client有同步和异步两种使用方式,如下:

同步方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
    die("connect failed.");
}

if (!$client->send("hello world"))
{
    die("send failed.");
}

$data = $client->recv();
if (!$data)
{
    die("recv failed.");
}

$client->close();

异步方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$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', 9501, 0.5);

与swoole_client相关的几个实体如下图:

以本文开头两个示例代码为例子:

同步方式的执行


1、执行connect方法

2、执行send方法,调用swClient_tcp_send_sync()->swConnection_send()->send(/*系统调用*/)

3、执行recv方法,调用swClient_tcp_recv_no_buffer()->swConnection_recv()->recv(/*系统调用*/)

4、执行close方法,调用swClient_close()

异步方式的执行


1、执行__construct方法

2、执行on方法,设置回调函数

3、执行connect方法

4、执行php_swoole_event_wait函数