架构

sequenceDiagram

定时器检查

flowchart TB N0[void *args] N1[entry, list, &g_urpc_keepalive_mgmt.reachable_list] N2[current_time - entry->timestamp > check_time] N3[URPC_KEEPALIVE_FAILED, info] N4[delay_release_time, ...] N5[entry->timer, check_time, urpc_keepalive_check, ...]

保活消息格式

保活消息复用 URPC REQ 头格式,使用专用 function ID:

// protocol.h:
#define URPC_KEEPALIVE_FUNCTION_ID  (0x002001000005)
#define URPC_KEEPALIVE_HDR_SIZE     (sizeof(urpc_req_head_t) + sizeof(urpc_keepalive_head_t))

// keepalive_head 结构:
typedef struct urpc_keepalive_head {
    uint8_t version : 4;
    uint8_t is_rsp : 1;          // 是否为响应
    uint8_t status;              // 处理结果
    uint16_t l_qid;              // 本地队列 ID
    uint32_t server_channel : 24;
    uint32_t rsvd[9];            // 最后 28B 用于加密头
} urpc_keepalive_head_t;

配置参数

参数范围默认值说明
keepalive_cycle_time[1, 3600] s必填保活消息发送间隔
keepalive_check_time[cycle_time, 3600] s必填超时判定时间
delay_release_time[1, 3600] s必填超时后延迟释放时间
q_depth[1, 128]128保活队列深度