2017-04-18 128 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