创建TCP客户端

建议先阅读官方文档的以下章节.

在PHP中,我们常用socket函数来创建TCP连接,用CURL库来创建Http连接。同样的,为了简化操作,Swoole也提供了同样的Client类用于实现客户端的功能,并且增加了异步非阻塞的模式,让用户在客户端也能使用事件循环。

同步客户端

// 创建一个同步非阻塞客户端tcp socket
// 第一个参数是表示socket的类型,有下面四种类型选择,这里选则tcp socket就好
/*
SWOOLE_SOCK_TCP 创建tcp socket
SWOOLE_SOCK_TCP6 创建tcp ipv6 socket
SWOOLE_SOCK_UDP 创建udp socket
SWOOLE_SOCK_UDP6 创建udp ipv6 socket
*/

// 第二个参数是同步还是异步
/*
SWOOLE_SOCK_SYNC 同步客户端
SWOOLE_SOCK_ASYNC 异步客户端
*/

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);

// 随后建立连接,连接失败直接退出并打印错误码
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");

//向服务端发送数据
$client->send("我要连接服务器");

//从服务端接收数据
$response = $client->recv();

// 输出接受到的数据
echo $response . PHP_EOL;

// 关闭连接
$client->close();

同步client是同步阻塞的。一整套connect->send()->rev()->close()是同步进行的。如果需要大量的数据处理,后台不能在规定的时间内返回数据会导致接收超时,并且因为是同步执行所以需要等待后台数据的返回。

异步客户端

<?php

//异步tcp客户端

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

//连接服务端
$client->on("connect", function(swoole_client $cli) {
        $cli->send("异步客户端数据");
});

//接收到服务端发送的消息时触发的
$client->on('receive', function ($cli, $data) {
         echo $data;
});

$client->on('error', function ($cli) {
});

//监听连接关闭事件,客服端关闭,或者服务器主动关闭
$client->on('close', function ($cli) {

});

//先绑定事件之后随后建立连接,连接失败直接退出并打印错误码
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");

其他

什么是网络协议?

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合

swoole_client的构造函数如下所示:

swoole_client->__construct($sock_type,SWOOLE_SOCK_SYNC, $key);

默认的swoole的server是可以提供tcp/udp , socket请求协议,然后根据请求数据,执行相应的逻辑

第一个参数:

  • SWOOLE_SOCK_TCP 创建tcp socket

  • SWOOLE_SOCK_TCP6 创建tcp ipv6 socket

  • SWOOLE_SOCK_UDP 创建udp socket

  • SWOOLE_SOCK_UDP6 创建udp ipv6 socket

第二个参数表示是同步还是异步

  • SWOOLE_SOCK_SYNC 同步客户端

  • SWOOLE_SOCK_ASYNC 异步客户端

第三个参数

用于长连接的Key,默认使用IP:PORT作为key。相同key的连接会被复用.

Last updated