Удовлетворительно ли обслуживать вебсокет - архитектуру с одним потоком и асинхронностью? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть веб-сокет, к которому я получаю доступ из python, как показано ниже.

Затем я хочу открыть этот веб-сокет (со слегка измененными данными) через спокойный интерфейс (он не может быть веб-сокетом для моих целей) где клиент может пропинговать его и должен получать самую последнюю полностью обновленную информацию (каждый раз, когда полный набор данных с самого начала).

Как можно избежать перезапуска веб-сокета при каждом пинге клиента restful interface?

Код выглядит следующим образом:

websocket:

class WebSocketExample:
    async def _get_data(self):
        self.data= []
        async with websockets.connect(uri) as websocket:
        while True:
                try:
                    data_raw= await asyncio.wait_for(websocket.recv(), 5)
                    self.data+= data_raw
                except asyncio.TimeoutError:
                    break

    def initiate_websocket(self):
        asyncio.set_event_loop(asyncio.new_event_loop())
        loop = asyncio.get_event_loop()
        loop.run_until_complete(self._get_data())
        loop.close()

Restful-интерфейс использует flask и просто создает экземпляр класса WebSocketExample и получает данные назад:

def restful_call():
    websocket = WebSocketExample()
    return websocket.data

Проблема заключается в том, что каждый раз, когда новый вызов выполняется через интерфейс restful, ему нужно будет с самого начала снова загружать все из веб-сокета.

Что бы хороший способ переписать этот код (концептуально) и заставить веб-сокет непрерывно загружать все данные в фоновом режиме в память, а затем o обслуживать спокойный интерфейс одновременно? Мой веб-сокет очень медленный, и данные, которые я получаю от него, должны быть предварительно обработаны. Я бы хотел не записывать это в базу данных, а только хранить в памяти. Как я могу сделать все это во время работы успокоительного интерфейса, который, я полагаю, будет управлять процессом. Есть ли необходимость в нескольких потоках? Любые предложения архитектуры будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...