Я работаю над серверной частью веб-приложения Django, которое также должно выполнять сокет-ввод / вывод с сенсорными устройствами в полевых условиях через GPRS, используя связь TCP.
Мне удалось получить данные с устройств с помощью модуля python asyncore
. Я настраивал устройства для отправки данных через TCP на сервер, а затем я собирал эти входящие данные, используя asyncore
(что я выбрал из-за асинхронного подхода к вводу-выводу через сокеты).
Документы говорят о перегрузке asyncore.dispatcher
или asyncore.dispatcher_with_send
, чтобы иметь возможность реализовать пользовательские действия в обратных вызовах, таких как handle_write
, handle_read
и т. Д.
В настоящее время я могу получать входящие данные, подбирая их методом handle_read
, но недавно появилось новое требование:
Требуется иметь возможность удерживать соединение, когда устройство подключается к серверу, чтобы мы могли отправлять ему некоторые команды (например, требуя, чтобы оно идентифицировало себя), и после этого продолжать использовать отправленные данные один раз. признан подлинным.
Итак, я добавил код в метод handle_write
в моей реализации, код для отправки команд «идентифицировать себя» на устройство, которое подключилось к нам. Но моя проблема в том, что этот код никогда не выполняется, даже когда устройства продолжают подключаться, а handle_read
показывает, что я могу получить входящие данные!
Я попытался поместить код "идентифицировать себя" (который посылает некоторые шестнадцатеричные команды, как показано ниже)
print 'Attempting to Identify Remote Party...'
self.send('\x40\x40\x00\x11\x12\x34\x56\xFF\xFF\xFF\xFF\x90\x01\x41\xCF\x0D\x0A')
надеясь, что ответ придет через handle_read
, пока я буду удерживать данные, которые были отправлены ранее, но это не удалось! Что я могу сделать?
Какой лучший / лучший способ это осуществить?