创建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
Was this helpful?