Ситуация такова, что я хочу создать клиентское приложение, которое подключается к серверу (это собственный протокол TCP), поддерживает постоянное соединение и иногда отправляет некоторые запросы, получает ответы.Пока что то, чего я могу легко достичь с помощью библиотеки Python Twisted.
Однако в этом случае сервер довольно болтлив и может в любое время принять решение о том, что он отправит сообщение-объявление всем своим подключенным клиентам.С точки зрения протокола, в заголовке пакета есть поле (назовем его packetid
), которое позволяет мне сопоставлять ответы на запросы и отличать пакеты объявлений от них, без проблем с точки зрения протокола.
Теперь я думаю, как реализовать код, который сможет справиться с этим, чтобы отличать входящие ответы от объявлений сервера.Моя идея состоит в том, чтобы просто поддерживать словарь в пользовательской реализации Protocol
и сохранять там объекты Deferred
для каждого запроса (ключом будет packetid
).Получив индивидуальное сообщение через receivedData
, я использую поле packetid
, указанное в моем пакете, для поиска в словаре и вызываю соответствующие обратные вызовы для соответствующих Deferred
, если это ответ на некоторые из предыдущих запросов, в противном случае реагируютк нему как к сообщению сервера.
Это решение хорошо, или есть какое-то лучшее решение, возможно, использующее некоторые из уже предоставленных скрученных механизмов?Кроме того, существует ли какой-либо существующий протокол с такими же характеристиками, протокол, который необходим в том же соединении, чтобы отличать ответы от других сообщений (чтобы я мог вдохновиться его реализацией)?