Игнорировать / отбрасывать входящий HTML после отправки GET в сокет - PullRequest
0 голосов
/ 10 мая 2018

Я использую следующий фрагмент кода для отправки данных на веб-сервер.В этом случае меня не волнует HTML-страница, которую сервер хочет отправить обратно.Сервер поддерживает других клиентов, которым нужны эти данные, поэтому я не могу исключить количество HTML, которое будет возвращаться на моем Python на Raspberry Pi.Я часто вижу, что сервер ESP-8266 зависает в ожидании отправки данных обратно моему клиенту Python / Pi.Как Пи перестает принимать данные, пока не наступит тайм-аут.В качестве теста я удалил 50% обслуживаемой веб-страницы, и она отлично работает на Pi / Python.Должен ли я что-то делать в коде python, чтобы установить размер буфера или выполнить команду, чтобы гарантировать, что данные отбрасываются и не хранятся в буфере сокета где-то, что может переполниться или что-то, что заставляет python / pi перестать принимать данные сервера?

htmlString = ("/Interior, /COLOR,r="+str(dimPixelIn[0]).zfill(3)+",g="+str(dimPixelIn[1]).zfill(3)+",b="+str(dimPixelIn[2]).zfill(3))
conn = http.client.HTTPConnection(awningAddress, timeout=0.3)
try:
    conn.request("GET", htmlString)
except socket.timeout as sto:
    print("Error")
except http.client.HTTPException as Exc:
    print("Error")
finally:    
    conn.close()
conn.close()

1 Ответ

0 голосов
/ 10 мая 2018

TCP-соединение состоит из 2 почти независимых однонаправленных потоков.conn.close() закрывает только поток от клиента к серверу.Соединение между сервером и клиентом все еще открыто, и сервер все еще отправляет данные.

Я знаю 2 варианта, как запретить серверу отправлять ненужные данные.

  • Неиспользуйте метод GET.Используйте метод OPTIONS.Если сервер поддерживает метод OPTIONS (и он должен), то обрабатывает его как запрос GET, но отправляет HTTP-ответ с заголовками HTTP, но без тела.
  • Сбросьте соединение, а не закрывайте его.Вы можете сбросить соединение при установке опции сокета SO_LINGER - см. Отправка сброса при соединении сокета TCP / IP , например.
...