Форум сайта python.su
Всем привет. Проблема следующая: Имеется некая готовая клиентская программа, которая взаимодействует с сервером по некоторому протоколу. Необходимо написать такой сервер. Начал писать его я использованием фреймворка Tornado. Однако, в некоторых ситуациях клиент шлёт некий блок данных, о размере которого ничего неизвестно, никаких разделителей нет, это просто блок бинарных данных. Теперь вопрос: как же мне при помощи Tornado считать такой блок??
Я делаю так:
self._stream.read_bytes(block_size, self._on_block_readed)
Отредактировано ksk- (Июль 16, 2013 08:14:19)
Офлайн
Если никаких блоков в траффике нет - значит вам и собирать ничего не нужно из трафика на стороне сервера. Если такой режим передачи этой клиентской программы - единственный, то можно не заморачиваться с торнадо, а открыть простой сокет в отдельном потоке, который будет принимать данные порциями по 1 байту, к примеру, без таймаута и складывать их в очередь queue, к примеру. В другом потоке из этой очереди можно читать. Если данные кончились - скрипт не заблокируется, а заблокируется лишь поток с сокетом, но это не важно. Или асинхронные сокеты.
Не посмотрел на дату поста….
Отредактировано skavans (Янв. 23, 2014 15:51:33)
Офлайн