swoole系列(三)- 连接与TCP和UDP

1.短连接与长连接

默认知识
任何需要从服务中获取数据都是需要建立连接的,并且建立与关闭连接均是会有资源消耗

短连接:一次连接一次交互,简称一次性
场景与栗子:如大部分web网页,ajax,http

长连接:一次连接多次交互,简称连绵不绝
场景与栗子:qq、微信聊天、直播、rpc

2.心跳检测(健康检查)

在这里插入图片描述

断开连接还有一些其他问题,比如超时,阻塞等问题
在这里插入图片描述
对于长连接这种断开的问题;主要的点就在于服务端会保护客户端会话的有效性以及平台上监控所有客户端的网络状况;对于这种功能的实现我们可以通过两种方式实现

  1. 轮询机制
  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, 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值