1. 什么是 Ping? #
Ping 是一种心跳检测机制,用于验证对方是否仍在响应、连接是否存活。任一方均可发起 ping,对方需及时回复空响应。
协议版本:2025-11-25
| 通俗理解 | 说明 |
|---|---|
| 心跳检测 | 像「你还活着吗?」的询问,对方回复即表示连接正常 |
| 可选 | Ping 是可选功能,实现可根据需要启用 |
| 双向 | 客户端或服务器均可发起 ping |
2. 本章你将学到 #
- Ping 的请求与响应格式
- 行为要求与超时处理
- 实现建议与错误处理
3. 消息格式 #
3.1 Ping 请求 #
Ping 是标准的无参数 JSON-RPC 请求:
{
"jsonrpc": "2.0",
"id": "123",
"method": "ping"
}3.2 Ping 响应 #
接收方必须及时返回空结果:
{
"jsonrpc": "2.0",
"id": "123",
"result": {}
}| 要求 | 说明 |
|---|---|
| 及时 | 接收方应尽快响应,不应拖延 |
| 空 result | result 为空对象 {} |
4. 行为要求 #
| 角色 | 要求 |
|---|---|
| 接收方 | 必须及时响应空结果 |
| 发送方 | 若超时未收到响应,可以认为连接已失效、终止连接或尝试重连 |
5. 流程示意 #
sequenceDiagram
participant S as 发送方
participant R as 接收方
S->>R: ping 请求 (id: 123)
R-->>S: 空响应 (id: 123)
典型场景:客户端每隔 30 秒发送一次 ping,若连续 3 次超时无响应,则判定连接断开并尝试重连。
6. 实现建议 #
| 建议 | 说明 |
|---|---|
| 定期发送 | 应当定期发送 ping 以检测连接状态 |
| 可配置 | Ping 频率应当可配置(如间隔 30 秒、60 秒) |
| 超时适配 | 超时时间应当适合网络环境(本地可短、远程可长) |
| 避免过度 | 应当避免过于频繁的 ping,减少网络开销 |
7. 错误处理 #
| 情况 | 处理 |
|---|---|
| 单次超时 | 应当视为连接可能失效 |
| 多次失败 | 可以触发连接重置或重连 |
| 记录 | 应当记录 ping 失败,便于诊断 |