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

[Swoole系列入门教程 3] 心跳检测的更多相关文章

  1. [Swoole系列入门教程 5] UDP协议和demo

    • 客户端服务端没有任何联系 • 指定地址跟端口,不关心消息是否发送成功 • 心跳检测不能影响到客户端• udp建立长连接

  2. [Swoole系列入门教程 4] 定时器与心跳demo

  3. [Swoole系列入门教程 1] CentOs 上的Swoole安装

    如果已经用宝塔安装好了PHP, 开启相应的扩展 一.编译安装git clone https://github.com/swoole/swoole-src.git cd swoole-src/ phpi ...

  4. [Swoole系列入门教程 6] TCP协议和粘包

  5. [Swoole系列入门教程 2] 入门级的Swoole的demo.服务端与客户端

  6. Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】

    Laravel 5 系列入门教程(一)[最适合中国人的 Laravel 教程] 分享⋅ johnlui⋅ 于 2年前 ⋅ 最后回复由 skys215于 11个月前 ⋅ 17543 阅读   原文发表在 ...

  7. 2016 版 Laravel 系列入门教程

    2016 版 Laravel 系列入门教程 (1) - (5) http://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-ch ...

  8. Mina 系列(四)之KeepAliveFilter -- 心跳检测

    Mina 系列(四)之KeepAliveFilter -- 心跳检测 摘要: 心跳协议,对基于CS模式的系统开发来说是一种比较常见与有效的连接检测方式,最近在用MINA框架,原本自己写了一个心跳协议实 ...

  9. 《进击吧!Blazor!》系列入门教程 第一章 8.部署

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

随机推荐

  1. Python自学:第四章 在for循环中执行更多操作(2)

    # -*- coding: GBK -*- magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(ma ...

  2. mysql 监控及优化——转载自http://www.cnblogs.com/suansuan/

    1.Mysql连接数 Mysql默认最大连接数为100. 设置Mysql的最大连接数,在Mysql的配置文件中增加: max_connections = 1000   #Mysql的最大连接数,默认如 ...

  3. MYSQL - database 以及 table 的增删改查

    MYSQL - database 以及 table 的增删改查 MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这 ...

  4. 0919CSP-S模拟测试赛后总结

    60分-rank36,不出所料又炸了. 总是试图稳住成绩,但就是不能避免这样的大起伏.这样不行啊. T1可是道sb题啊……对着题干yy了一个多小时,正解基本都想到了,只差一个结构体排序. 然而即使我真 ...

  5. 0908CSP-S模拟测试赛后总结

    我早就料到昨天会考两场2333 话说老师终于给模拟赛改名了啊. 距离NOIP祭日还有60天hhh. 以上是废话. %%%DeepinC无敌神 -rank1 zkt神.kx神.动动神 -rank2 有钱 ...

  6. 使用Windbg调试系统弹出的内存不可读错误

    步骤: 1. 使用Windbg挂钩到崩溃的进程上面 2. 使用~*k列出所有线程 3. 搜索UnhandledExceptionFilter所在的线程 4. 使用~ns切换到上面崩溃所在的线程,n为线 ...

  7. angularJS ng-repeat="item in XXX track by $index"问题记录

    参考:https://blog.csdn.net/lunhui1994_/article/details/80236315 问题:项目中对数据做了分页效果,理想是:当页数大于6时,隐藏>6的页数 ...

  8. Amazon S3和EBS的区别

  9. 廖雪峰Java12maven基础-1maven入门-2依赖管理

    maven 如果我们的项目依赖第三方的jar包: Commons Logging发布的jar包在那里下载? 使用Log4j需要哪些jar包 其他依赖:junit,Javamail,MySQL驱动... ...

  10. Python-数据分析模块

    目录 numpy 模块 matplotlib 模块 pandas 模块 numpy 模块 numpy 模块主要用来做数据分析,对numpy数组 进行科学运算 主要方法和常用属性,都是用numpy 生成 ...