Мы получаем данные от местного перевозчика через ретранслятор, в формате Wialon (как описано тут: http://gurtam.com/hw/cfg/Wialon%20IPS.pdf).
Т.е. слушаем сокет (backlog от 5 до 100) на указанном порту и складываем полученные данные к себе. Однако возникла следующая проблема: за одно прослушивание мы получаем набор данных только с одного автобуса, то есть сначала пакет логина (на который мы отвечаем #AL#1\r\n, иначе дальнейшие данные нам не идут), а потом набор пакетов с данными (на каждый из которых мы тоже отвечаем: #AD#1\r\n). Как только нам передаются все последние данные по этому автобусу, дальше ничего не происходит.
Если мы не ставим таймаут на получение новой порции данных, то спустя какое-то время мы получаем еще один-два пакета с данными, потом долго не получаем ничего.
Если же мы ставим таймаут и слушаем следующий запрос (socket.accept() в Python), то нам приходит только пакет логина, данные уже не приходят.
Если же мы ждем таймаута, закрываем сокет и создаем новый сокет на этом порту или просто заново слушаем его через socket.listen(backlog), то нам приходит пачка данных от другого автобуса. В принципе, это работающая схема, но пока мы по кругу обойдем все автобусы с таймаутом хотя бы 5 секунд, проходит несколько минут, а это уже не совсем реалтайм.
Есть ли какой-то правильный (нормальный) способ получать сплошной поток данных в той же последовательности, в которой он приходит на основной сервер?
Или в чем тут может быть проблема? Может, мы неправильно слушаем порт? Или что-то недоотвечаем?
Или может, перевозчик должен что-то настроить у себя? Тогда какие правильные вопросы надо задать админу перевозчика?