心跳协议设计

2020-12-30  本文已影响0人  wayyyy

为什么需要应用层心跳?Tcp Keepalive 能不能代替心跳?


UDP需要设计心跳吗?

UDP是无连接的,所以设计心跳没有意义。


心跳协议设计

其他注意事项
心跳检测与调试

在开发调试程序过程中,我们可能需要将程序通过断点中断下来,这个过程可能是几秒到几十秒不等。等程序恢复执行时,连接可能因为心跳检测逻辑已经被断开。

调试过程中,我们更多的关注的是业务数据处理的逻辑是否正确,不想被一堆无意义的心跳包数据干扰实线。

鉴于以上两点原因,我们一般在调试模式下关闭或者禁用心跳包检测机制。

#ifndef _DEBUG
    EnableHeartCheck();
#endif
心跳检测与日志

实际生产环境,一般会将程序收到的和发出去的数据包写入日志中,但是无业务信息的心跳包信息是个例外,一般会刻意不写入日志,这是因为心跳包数据一般比较多,如果写入日志会导致日志文件变得很大,且充斥大量无意义的心跳包日志,所以一般在写日志时会屏蔽心跳包信息写入。

bool success = WebSocketSession::send(strResponse);
if (success)
{
    bool enablePingPongLog = Singleton<Config>::Instance().m_bPingPongLogEnabled;
    // 其他消息正常打印,心跳消息按需打印
    if (strResponse != "pong" || enablePingPongLog)
    {
        LOGI("...");
    }
}

参考资料
1、http://101.37.25.166/blog/articles/%E9%AB%98%E6%80%A7%E8%83%BD%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1/%E5%BF%83%E8%B7%B3%E5%8C%85%E6%9C%BA%E5%88%B6%E8%AE%BE%E8%AE%A1%E8%AF%A6%E8%A7%A3.html
2、《Linux 多线程服务器端编程》

上一篇 下一篇

猜你喜欢

热点阅读