面试题答案
一键面试- 心跳机制
- 原理:客户端和服务端定期互相发送心跳包(简单的特定格式数据)。服务端在设定时间内若未收到客户端的心跳包,则判定客户端断开连接。例如,客户端每10秒向服务端发送一个心跳包“heartbeat”,服务端开启一个定时器,若超过10秒未收到该心跳包,触发相应处理。
- 实现:在服务端代码中,利用定时器(如Python中的
threading.Timer
或asyncio
的call_later
等)设置检测时间间隔,每次收到心跳包时重置定时器。客户端则按固定间隔发送心跳包,如在Python中使用socket.send(b'heartbeat')
发送。
- TCP Keepalive机制
- 原理:TCP协议自身提供的一种检测机制。当连接在一段时间内没有数据传输时,TCP会自动向对方发送探测包。若多次发送探测包后未收到响应,TCP会认为连接已断开。不同操作系统对该机制的默认参数设置不同,如Linux默认2小时无数据传输开始发送探测包。
- 实现:在服务端代码中开启该机制,如在Python中通过
socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
开启。还可进一步设置相关参数,如TCP_KEEPIDLE
(多久开始发送探测包)、TCP_KEEPINTVL
(探测包发送间隔)和TCP_KEEPCNT
(探测次数)等。在C语言中,可通过setsockopt
函数对相应套接字选项进行设置。