TCP接口心跳包学习笔记

心跳包用于保持长链接的活跃状态,确保网络连接的可靠性。它在TCP和应用层都有作用,应用层心跳包不仅能检测网络连接,还能检查服务接口的正常性。文章通过实例展示了在即时通讯场景下缺少心跳包会导致的问题,并提供了Python实现心跳包发送的代码示例。此外,讨论了TCP与UDP的区别以及HTTP与WebSocket接口的不同。
摘要由CSDN通过智能技术生成

一、【心跳包】

        减少服务器资源占用

二、长链接中的心跳包是什么

        保活:keep alive

        > 定时向服务端发送信息

        > 能够响应服务端信息

三、复现缺少心跳包的BUG

        长链接业务场景:

                》游戏

                》即时通讯

        即时通讯:虚拟机模拟服务器,可以暂停运行的代码,Xshell当客户端访问服务器(telnet 192.168.56.103 9001),进入聊天室。

        此时暂停服务器,模拟服务器掉线,客户端ping不同,在没有心跳机制的情况下,服务端掉线,对方不可知,客户端不能发消息,网络不可知。

        设想:如果客户端掉线,服务端不知道,此时还维持链接,就是额外无效系统开销

        为什么需要心跳包?

                》在NAT、防火墙网络中转设备,保持信道记录

                》及时发现对方网络断开,以便及时采取措施

四、如何实现心跳包

        》TCP层面心跳包,只能够验证网络连接是否异常(用户层无感知)

                例子:一个接口网线、CPU、电线、网卡都正常,但是此时这个接口已经死循环,无法处理请求,此种情况检查不出来

        》应用层面的心跳包,验证服务接口是否异常(判断接口逻辑、功能、能力是否正常),工作当中用这个

        问:为什么不同时采用两种,而是放弃第一种:

        答:因为第二种包含了第一种,能传输信息已经证明接口网络正常

     

          1. 能发送socket心跳包

                》postman:不能

                》jmeter:依赖插件

                》python:所有

         2.编写socket测试用例

                》创建文件

                》导入socket模块

                》编写代码  

import socket
import time
from threading import  Thread # 参考java中的线程

server_adders = "127.0.0.1", 9001

client = socket.create_connection(server_adders)
print("连接成功")

'''
实现心跳包发送代码
    1.需要不断地发送
    2.能够及时停止
'''
def ping():
    "发送心跳包"
    while True:
        time.sleep(4) # 5秒之内
        client.sendall(b"_PING") # _PING 心跳包内容

# 这个循环主线程,测试主流程
while True:
    # ping() # 建立链接之后就发
    Thread(target=ping).start() # 启动新线程,执行发送心跳包的代码
    # 此处ping没有返回值,不能加(),所以为ping
    # ping  一个函数
    # ping() 一个函数的返回值
    msg = client.recv(1024 * 4)
    # client.sendall("心跳包数据\r\n".encode())
    # time.sleep(1) // 不能这样一直发
    if not msg:
        print("服务端断开连接")
        break
    print("msg: ", msg)
    if b"Please set your nickname" in msg:
        client.sendall(b"BeiFan\r\n")
        print("需要给服务器发送信息", b"BeiFan")

        实现心跳包发送机制:每4秒发送一个心跳包

        基本原则:和测试用例、已经业务流程,互不干涉

        并发编程:

        》多线程  ——>最简单

        》多进程

        》协程 ——>最牛皮

       PING\PONG:乒乓球(来回来回,表示心跳)

       在websocket协议中,作为心跳协议名

        

问:TCP和UDP的区别是什么?

答:TCP是可靠的网络传输,没有收到心跳包,断言 网络中断

问:HTTP接口和websocket接口有什么区别?

答:http接口是基于http协议的

        websocket接口是基于websocket协议,过程如下:

        1.HTTP  返回101 (先HTTP握手)

        2.TCP  》》》长链接 (后面转成TCP)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值