2017-04-18 4 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)부터 시작해야합니다.

대신 내 사이트 mysim900.com에 계속 연결될 수있는 방법 (AT 명령)이 있습니까?
그리고 내 웹 사이트에서 신속하게 데이터를 가져올 수있는 한 줄의 AT 명령 만 있으면 코드 재생 빈도가 증가합니다.

+0

단일 TCP 연결에서 여러 HTTP 요청을 할 수 없습니다. 각 요청에는 자체 연결이 필요합니다. –

답변

1

처음에는 발급 요청이 잘못되었습니다 (\r\n이 너무 많음). HTTP/1.0을 사용하여 HTTP를 유지하려면 Connection: keep-alive 헤더를 추가해야합니다. 여전히 이것은 서버에 연결을 유지할 수있는 제안 일뿐입니다. 물론 연결 유지가 응답의 끝으로 더 이상 작동하지 않기 때문에 HTTP 연결 유지 기능을 사용하면 content-length를 추출하여 응답의 적절한 끝을 찾아야합니다.

+0

실제로 ESP8266은 3 번 사용하면 받아 들여 보내집니다. 한 번 작동하지 않습니다. 그리고 또 다른 한 가지는 요청에서 언급해야합니다. 연결 : 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