1.短连接与长连接
默认知识
任何需要从服务中获取数据都是需要建立连接的,并且建立与关闭连接均是会有资源消耗
短连接:一次连接一次交互,简称一次性
场景与栗子:如大部分web网页,ajax,http
长连接:一次连接多次交互,简称连绵不绝
场景与栗子:qq、微信聊天、直播、rpc
2.心跳检测(健康检查)
断开连接还有一些其他问题,比如超时,阻塞等问题
对于长连接这种断开的问题;主要的点就在于服务端会保护客户端会话的有效性以及平台上监控所有客户端的网络状况;对于这种功能的实现我们可以通过两种方式实现
- 轮询机制
- 心跳检测
2.1 健康检查 - 轮询机制(不常用)
不常用的原因:因为不确定客户端的个数,可能有很多
为什么需要健康检查???
2.2 健康检查 - 心跳机制(常用)
心跳包
从客户端到服务端这条巨大的链路中会经过无数的路由器,每个路由器都可能会检测多少秒时间内没有数据包,则会自动关闭连接的节能机制。为了让这个可能会出现的节能机制失效,客户端可以设置一个定时器,每隔固定时间发送一个随机字符一字节的数据包,这种数据包就是心跳包。
2.3 健康检查 - swoole中的心跳检测
https://wiki.swoole.com/#/server/setting?id=heartbeat_check_interval
heartbeat_check_interval
此选项表示每隔多久轮询一次,单位为秒。如 heartbeat_check_interval => 60 ,表示每60秒,遍历所有连接,如果该连接在120秒内 (heartbeat_idle_time 未设置时默认为 interval 的两倍),没有向服务器发送任何数据,此连接将被强制关闭。若未配置,则不会启用心跳,该配置默认关闭。
https://wiki.swoole.com/#/server/setting?id=heartbeat_idle_time
heartbeat_idle_time
连接最大允许空闲的时间,需要与 heartbeat_check_interval 配合使用
利用定时器定时发送
swoole_timer_tick(4000, function ( t i m e r i d ) u s e ( timer_id) use ( timerid)use(client) {
echo “请求信息\n”;
$client->send(‘1’);
});
3.Tcp与Udp对比
3.1 Tcp-server 服务端
$server = new Swoole\Server("127.0.0.1", 9503);
$server->on('connect', function ($server, $fd){
echo "connection open: {
$fd}\n";
});
$server->on('receive', function ($server,