Отправка данных через сокеты может быть слишком медленной? - PullRequest
0 голосов
/ 23 января 2020

Справочная информация : У меня есть сценарий TCP Socket python, настроенный на Raspberry Pi 4 для связи с компьютером, не подключенным к сети. На машине настроены команды, которые я посылаю ему через сокет с запросом "Каково значение A?" и машинный ответ - это значение A. Хотя я не очень хорошо знаком с кодировкой машины, я понимаю, что при запросе таким образом она печатает значение. Я получаю эти данные через сокет, просто вставив socket.sendall("What is the value of A"), а затем сразу socket.recv(SIZE). Моя аналогия - это как бросать мяч в стену одной рукой, а ловить другой. Соединение выполняется с помощью кабеля Ethe rnet длиной около 100 футов.

Проблема : я могу довольно часто запрашивать через этот сокет, вплоть до того момента, когда я могу отправлять 60 массивов ввода назад и вперед между 5-10 разами, но в конце концов соединение закрывается вверх. Я не совсем уверен, почему это так. Дошло до того, что я должен отключить все, закрыть все розетки и просто дать ему немного времени, прежде чем пытаться снова. Хотя диагностика проблемы может быть неясной без полного понимания машины (о которой я не могу дать больше информации), я склоняюсь к использованию потоков для запуска двух независимых процессов: один поток для запроса, один поток для получения , Я полагаю, что recv() пропускает пресловутый шар, а затем сидит и ждет ответа от машины, но машина больше никогда не говорит, потому что код остается ждать. У меня нет большого опыта работы с потоками, и поэтому буду признателен за некоторые предложения. Другая мысль состоит в том, что кабель Ethe rnet слишком длинный для Pi, чтобы справиться с передачей такого большого количества данных. Это кажется более наивным, но я не сетевой инженер и поэтому не претендую на полное понимание этого процесса.

Заранее спасибо, не стесняйтесь задавать любые уточняющие вопросы.

...