esp8266 ответ сервера

one_player
Offline
Зарегистрирован: 15.11.2016

Добрый день. Есть проект на ESP-12E (NodeMcu v3) в котором ESP отправляет значение на веб сервер. После того как данные не сервере обработаются сервер выдает echo "gooddata"; или echo "baddata"; более ничего эта страничка не выдает. Все хорошо работает но вот если смотреть через монитор порта на те данные что принимает ESP от сервера то видно что 90% данных это заголовки http что заметно сказывается на скорости ответа ESP пользователю.

ответ в порт

HTTP/1.1 200 OK
Date: Wed, 07 Mar 2018 12:18:30 GMT
Server: Apache
Content-Length: 8
Connection: close

gooddata

Код отправки

WiFiClient client;
if (!client.connect(host, httpPort)) 
          {
            Serial.println("connection failed");
          }
client.print(String("GET /insert.php?id=")+find+" HTTP/1.1\r\nHost: "+host+"\r\nConnection: close\r\n\r\n");
          delay (200);
          if (client.connected()) 
          {
              String c = client.readString();
              if(c.indexOf("gooddata")>0)
              {
                      Serial.println( "Data send. Ok!");
              }else
              {
                       Serial.println( "Data send. Fault!");
              }
              Serial.print(c);//Deb
            client.stop();
          }

Все отправляется на субдомен. 

Может кто подсказать как уменьшить время чтения ответа? 

p.s. 

В этом проекте участвует еще w5100 у нее такая же беда с получением ответа. 

Через браузер если передать GET скрипт на сервере отвечает моментально.

one_player
Offline
Зарегистрирован: 15.11.2016

Просьба поправить меня если я не прав или как то нарушаю всемирный баланс )). Из ситуации вышел так. Раз уж я парюсь над чтением заголовков, а потом над ответом. То почему бы не менять заголовок в зависимости от результата работы скрипта на веб сервере.

код чтения ответа 

 if (client.connected()) 
          {
              String c = client.readStringUntil('\r');
              Serial.print(c);//Deb
              if(c=="HTTP/1.1 200 OK")
              {
                      Serial.print("Data send. Ok!");
              }else
              {
                     Serial.print("Data send. Fault!");
              }

В рhp скрипте в ответы вставил подмену заголовка на отрицательный результат работы скрипта

header("HTTP/1.1 201 OK");

Теперь если все Ок то сервер шлет мне "HTTP/1.1 200 OK". И если все не Ок то мне приходит "HTTP/1.1 201 OK".

Читая только первую строку до конца и сравнивая ее с ожидаемым ответом я понимаю каков результат запроса отправленного esp8266

В результате этого скорость ответа esp8266 человеку доли секунды 

p/s/

Код 201 означает Created-"Создано". Запрос успешно выполнен и в результате был создан ресурс. Этот код обычно присылается в ответ на запрос PUT "ПОМЕСТИТЬ".

Logik
Offline
Зарегистрирован: 05.08.2014

Годный хак )) Только код выберите более осмысленый, там их много разных. А вобще для быстрого обмена HTTP не самое подходящее. Голый TCP/IP быстрей будет. Но сервер свой прийдется писать вместо вебсервера. А это сложно. Можете еще про WebSocket почитать, он быстрый и хороше в JS поддержан.

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

Logik пишет:

Годный хак )) Только код выберите более осмысленый, там их много разных. А вобще для быстрого обмена HTTP не самое подходящее. Голый TCP/IP быстрей будет. Но сервер свой прийдется писать вместо вебсервера. А это сложно. Можете еще про WebSocket почитать, он быстрый и хороше в JS поддержан.

Это не сильно годный хак! Для кодов возврата HTTP есть строго стандартизованные коды возврата, а отход от стандарта влево или вправо - растрел на месте!

По TCP (или UDP) такой обмен был бы на порядки быстрее (может даже не один порядок).

А написать TCP сервер ... в Windows это и вправду хлопотно, а в Linux, например, используя демон суперсервера inetd / xinetd - пишется ровно в 3-4 строчки кода на C/C++.

 

Logik
Offline
Зарегистрирован: 05.08.2014

203 Non-Authoritative Information — аналогично ответу 200, но в этом случае передаваемая информация была взята не из первичного источника (резервной копии, другого сервера и т. д.) и поэтому может быть неактуальной.

Строго стандартный. И сути проблемы намного лучше соответствует. Если знать что автор имеет ввиду под "baddata", то может и еще лучше чего найдется.

Что под винду, что под линукс - один хрен. И уж точно inetd не для быстрого обмена, там процесс запускается новый при акцепте, что ну никак не быстро.

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

Logik пишет:

И уж точно inetd не для быстрого обмена, там процесс запускается новый при акцепте, что ну никак не быстро.

Очень даже быстро, если сравнивать с реакцией HTTP-сервера.

(Ссылки дать?)