socket入门到精通(二)心跳机制

  今天和大家一块学习一下即时通讯中的心跳机制。有一些小伙伴私下问为什么不直接开始上干货。我这边个人感觉是socket是一个比较大,牵扯的知识点比较多,从外围一点一点的了解学习socket,然后完全掌握。

心跳机制

  心跳机制的原理很简单:客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端。如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,我们就认为目标TCP连接已经断开了。

心跳的作用

  • 通知服务器,客户端存活状态,一旦服务器监测到在某段时间没有收到客户端发来的心跳包,服务器就会释放曾经为此客户端分配的所有资源,例如Socket连接

  • 定时的刷新NAT内外网IP映射表,以便防止NAT路由器移除映射表,导致客户端和服务器端的连接中断户体验。

心跳的实现方案

心跳的方案实现有很多种我这里重点说一下比较有代表性的两种心跳机制。
方案一:服务器主动发送心跳包
  服务器建立定时器,定时发送心跳包给到客户端,客户端收到心跳包后,立即发送心跳包给到服务器,服务器收到客户端发来的心跳包后确认客户端的连接可用,不执行释放socket相关的操作。如果服务器端没规定的时间间隔内没有收到客户端响应的心跳包,服务器端就认为客户端的连接不可用,执行释放socket相关的操作。有点是服务器端能够准确的掌握客户端是否在线,缺点是对服务器端性能要求较高。
方案二:客服端主动发送心跳包
  客户端定时主动的发送心跳包给到服务器端,服务器端收到心跳包后对相关的socket进行加标识,然后服务器端发送响应心跳包给到客户端。客户端收到心跳包认为连接可用。如果服务器端超过一段时间没有收到心跳包,相关的socket的标识符回进行降权,直至失效,然后服务器端会释放这个socket相关的资源。这个对服务器的性能要求不那么高,我这边由于用手机作为一个server来处理数据的,性能差,所以我这边服务器端接收到客户端发来的心跳包以后,并没有给客户端发响应心跳包,只是做了加标识符的操作。
参考文章:https://blog.csdn.net/youniworld/article/details/47300019

更多优质文章,可以微信扫码关注:
这里写图片描述

《Python从入门精通(第版)》PDF是一本非常详细的Python编程学习教材,涵盖了从入门基础到高级应用的全部内容。本书共分为八章,分别是Python简介、Python基础语法、Python数据结构、Python函数与模块、Python面向对象编程、Python高级语法、Python标准库、Python网络编程。每章都按照基础知识、练习和实战的顺序组织,注重理论与实践相结合的学习方式。 在本书中,读者可以学到Python基础知识、Python高级语法和Python面向对象编程等方面的内容。其中,Python基础知识是学习Python的前置知识,主要包括Python的安装与环境配置、Python的语法规则、Python的基本数据类型、Python的运算符、Python的流程控制、Python的异常处理等内容。Python高级语法和Python面向对象编程则是Python编程的核心内容,包括Python函数的高级应用、Python模块的使用、Python面向对象编程的特点、Python类的继承与多态等内容。在系统学习完Python语言基础知识的基础上,我们可以更好地理解和掌握Python高级语法和Python面向对象编程的知识。 另外,《Python从入门精通(第版)》PDF还涵盖了Python网络编程和Python标准库的内容。Python网络编程主要介绍了Python网络编程的基本知识,主要包括socket编程、HTTP协议、SMTP协议、POP协议、FTP协议等内容。Python标准库则是Python编程中的重要工具库,提供了Python编程中经常使用的常见工具库,如os库、sys库、re库、pickle库、datetime库、logging库、threading库等。在Python编程中,掌握Python标准库的使用非常重要,可以提高编程的效率和质量。 总之,《Python从入门精通(第版)》PDF是一本非常全面、详细的Python编程教材,适合Python编程初学者和初级开发人员阅读学习。通过本书的学习,读者可以加深对Python语言的理解,提高Python编程水平,掌握Python应用开发的核心知识和技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值