http的层面上来说,没有一个入参,是用来指定该http连接为长连接的。
长连接就是一个普通的http连接。只是因为程序员,没有立即调用该连接的close()方法。
而是等不需要该连接的时候,才close()该连接。
所以,这个连接,就叫做长连接。
长连接必须使用tcp协议。
http连接,是建立在tcp协议的基础上的。
http中,其实没有长连接这样的类型。
保持一个tcp连接是长连接。完全是通过程序员手动来控制的。
如果程序员,想让一个http连接,比如该连接叫A,让A成为一个长连接。
那么,就不调用该连接的close()方法。
直到,不再需要A连接的时候,才关闭该连接。
那么,A就叫做一个长连接。
//定时器的超时响应函数
/*
服务端每隔15秒发一次心跳包
//长连接请求发出后,该定时器设定为45秒后触发
//下面槽的作用,就是为了检测m_bRecvHeartbeat的值,即客户端是否收到了服务端发过来的心跳包
*/
void SimpleHttp::OnOutTimer()
{
//定时器超时了
m_bOutTime = true;
if(m_Mode != HTTP_KEEPALIVE)//标识该连接,是A。那么,程序员在关闭A连接的时候,就需要检测心跳包。
{
m_OutTimer->stop();
m_NetworkReply->close();
}
else
{
//http是长连接
if(!m_bRecvHeartbeat) //心跳包停止了
{
m_OutTimer->stop();
m_AutoBreakOutTimer->stop();
m_NetworkReply->close();//没有收到心跳包,关闭http连接
}
else
{
//接收到了服务端发过来的心跳包,那么不关闭http连接
m_bRecvHeartbeat = false;
}
}
}