http連線 如何建立長連線
阿新 • • 發佈:2018-12-31
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
{
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;
}
}
}