Swoole长连接异步客户端
1、TCP异步客户端
$client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
0、SWOOLE_SOCK_TCP 客户端协议类型
1、SWOOLE_SOCK_ASYNC 异步还是同步
2、基础设置
$client->set([
'open_length_check'=>1,
'package_length_type'=>'N',
'package_length_offset'=>0,
'package_body_offset'=>4,
'package_max_length'=>1024 * 1024 * 3,
]);
0、open_length_check 开启长度检测
1、package_length_type 设置包头的长度
2、package_length_offset 包头长度从哪儿开始计算
3、package_body_offset 包体从第几个字节开始计算
4、package_max_length 包体的最大长度
3、基本的事件调用
0、连接事件
$client->on("connect", function(swoole_client $cli){
$data = pack('N', strlen('test123')).'678';
$cli->send($data);
});
1、接收事件
$client->on("receive", function(swoole_client $cli, $data){
var_dump($data);
});
2、错误事件
$client->on("error", function(swoole_client $cli){
echo "error\n";
});
3、客户端关闭事件
$client->on("close", function(swoole_client $cli){
echo "Connection close\n";
});
4、连接服务端的IP和端口
$client->connect('127.0.0.1', 9800) || exit("");
这里用127.0.0.1,是因为我这里的客户端和服务端代码都部署在同一台服务器上
5、定时器,保持长连接
swoole_timer_tick(9000,function () use($client){
$client->send(pack('N', strlen('1')).'1');
});
0、心跳是什么?
顾名思义,心跳是判断一个事物生还是死的一个标准,在swoole里,心跳是指用来判断一个连接是正常还是断开的
1、心跳作用主要有两个:
1、客户端定时给服务端发送点数据,防止连接由于长时间没有通讯而被某些节点的防火墙关闭导致连接断开的情况。
2、服务端可以通过心跳来判断客户端是否在线,如果客户端在规定时间内没有发来任何数据,就认为客户端下线。这样可以检测到客户端由于极端情况(断电、断网等)下线的事件。
2、服务与之呼应的配置
$server->set([
'worker_num'=>1, //设置进程
'heartbeat_idle_time'=>10,//连接最大的空闲时间
'heartbeat_check_interval'=>3 //服务器定时检查
]);
查看函数 swoole_timer_tick
在说完下一节长连接的服务端之后,再来进行总体分析,敬请期待……