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测试方法, 写个定时器, 再差不多到空闲时间, 客户端就发送一个消息,用于保持连接

  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/Skrillex/p/11837915.html
Copyright © 2011-2022 走看看