2017-04-18 160 views
1

我需要在每次連接到我的網站並獲取數據時節省時間。保持TCP連接保持活動狀態並僅循環GET命令

這就是我所做的。

ESP模塊連接到家庭WiFi。

  1. AT+CIPMUX=0 - >響應OK
  2. AT+CWMODE=1 - >響應OK
  3. AT+CIPSTART="TCP","http://mysim900.com",80 - >響應connected OK
  4. AT+CIPSEND=75 - >響應 - >>waiting for data to GET or POST
  5.  

    >GET http://mysim900.com/sw_status.php?status=list_all HTTP/1.0 /r/n/r/n/r/n 
    
    send OK. 
    

迴應200並接收來自我網站的所有字節。 最後

connection CLOSED. 

再重複步驟3,4和5,我可以順利拿到由次我的網站倍數的數據。
並且每次在第5步結束時模塊都會顯示 - >connection CLOSED

我需要的不是每次關閉連接。
每次建立連接需要時間並重新建立,我需要從步驟3開始(AT+CIPSTART)。

相反,是否有任何可能的方式(任何AT命令)保持連接到我的網站mysim900.com?
只需一行AT命令即可快速從我的網站獲取數據,這樣我的代碼的刷新率就會增加。

+0

您無法在單個TCP連接上發出多個HTTP請求。每個請求都需要自己的連接。 –

回答

1

首先您發出的請求是錯誤的(一個\r\n最後太多)。如果您希望HTTP保持HTTP/1.0的活躍狀態,您必須添加一個Connection: keep-alive標頭。不過,這只是對服務器的建議,它可能會保持連接打開。當然,對於HTTP保持活動狀態,您需要通過提取內容長度來找到響應的正確結尾,因爲連接的結束將不再作爲響應的結束。

+0

實際上ESP8266會接受和發送,如果我使用\ r \ n三次。一旦無法工作。另一件事我應該在請求連接中提到:keep-alive?是否有任何特定的AT命令或我如何修改現有的請求? – mutthunaveen

+0

@mutthunaveen:必須給出'\ r \ n'兩次:首先發送當前標題行的結尾,另一個發送一個空行,從而標記HTTP標頭的結尾。並且'Connection:keep-alive \ r \ n'是HTTP標頭的一部分(包括GET行)。我建議你在使用之前研究HTTP的工作原理。其標準有:[HTTP/1.0](https://tools.ietf.org/html/rfc1945)和[HTTP/1.1](https://tools.ietf.org/html/rfc2616)。 –

+0

親愛的Steffen Ullrich ..謝謝你的解釋。現在一切都很有意義。我會閱讀上述材料並執行。再次感謝你。 – mutthunaveen