zoukankan      html  css  js  c++  java
  • [Swoole系列入门教程 3] 心跳检测

    一.Swoole 的4大知识点:
    1.TCP/UDP服务器
    2.微服务
    3.协程

    二.同步与异步:
    同步买奶茶:小明点单交钱,然后等着拿奶茶;
    异步买奶茶:小明点单交钱,店员给小明一个小票,等小明奶茶做好了,再来取。

    差别:发送消息和接受消息不是同步的!
    发送API请求, 和获取API请求的结果不是同步的!GPS平台可用

    所以用到的可能是swoole的异步client! 不过4.3之后,异步客户端的recv方法被移除了

    异步客户端(4.3之后是协程客户端?)是长链接, 不是连了就断了,但是oneLink服务器的不一定是长链接

    三.长链接和短连接
    短连接:例如ajax(HTTP), 链接完就断了,只能客户端主动发消息给服务端
    使用ajax模拟长链接的话, 轮询, 不断的去请求服务器, 不断的创建-销毁链接, 对服务器压力非常大

    长链接: 服务端也能够发消息给客户端(TCP)
    长链接可能存在的问题: 链接断开 ->引入心跳检测概念

    四:心跳检测

    分布式组件(心跳包):
    1.能够剔除一些无用的链接(例如webSocket关闭浏览器却没有关闭链接)
    2.保持活跃(长期没有发消息,类似QQ的敲门提示)
    3.网络传输过程中没了

    为什么要心跳检测?
    1.通过心跳检测,回收fd,因为fd资源是有限的
    2.客户端定时给服务端发送点数据,防止连接由于长时间没有通讯而被某些节点
    的防火墙关闭导致连接断开的情况。
    3.服务端可以通过心跳来判断客户端是否在线,如果客户端在规定时间内没有发来任何数据,
    就认为客户端下线。这样可以检测到客户端由于极端情况(断电、断网等)下线的事件。

    五.swoole心跳检测的代码实现

    $server->set([
    'worker_num'=>1, //设置进程
    'heartbeat_idle_time'=>10,//连接最大的空闲时间
    'heartbeat_check_interval'=>3 //服务器定时检查
    ]);

    六.定时器(Timer)

    demo测试方法, 写个定时器, 再差不多到空闲时间, 客户端就发送一个消息,用于保持连接

  • 相关阅读:
    vue生命周期过程做了什么
    css_css3_实用属性_随时补充更新
    echarts的symbol引用本地图片写法
    无废话设计模式(1)--简单工厂、工厂方法、抽象工厂
    JavaWeb--Maven学习
    SpringCloud Alibaba实战 -引入服务网关Gateway
    从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程 抽象的队列式同步器
    架构的搭建(一)SpringCloud Alibaba
    配置中心之Nacos简介,使用及Go简单集成
    RabbitMQ
  • 原文地址:https://www.cnblogs.com/Skrillex/p/11837915.html
Copyright © 2011-2022 走看看