1. 程式人生 > >http連線 如何建立長連線

http連線 如何建立長連線

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;

                    }
                }
            }