Короткое замыкание соединения между клиентом и веб-сервером aiohttp

Я пишу приложение, которое использует aiohttp для публикации веб-API. Мне также нужно опубликовать тот же API с другим протоколом (xmpp). В настоящее время решение состоит в том, чтобы встроить клиент xmpp в тот же процесс, который подключается к веб-API с помощью обычного HTTP-соединения (клиент aiohttp) и пересылает ответ через xmpp. Но поскольку они оба работают в одном и том же процессе, я бы предпочел, чтобы был способ «короткого замыкания» соединения.

Я думаю о чем-то вроде создания экземпляра запроса и передачи его методу в веб-приложении aiohttp (возможно, методу _handle()?) для его обработки.

Любые подсказки о том, как это сделать (желательно) не хакерским способом?


person Jonatan    schedule 23.02.2017    source источник


Ответы (1)


У меня сейчас что-то работает, что по крайней мере не зависит от приватных методов:

req = Request(...)
req.match_info = await app.router.resolve("/api/1.0/status")
response = req.match_info.handler(req)

Это работает, но есть возможности для улучшений. Я также использую собственный упрощенный класс Request:

from yarl import URL

class XmppHttpRequest:
    def __init__(self, method, path):
        self.method = method
        self.path = path
        self.rel_url = URL(path)
        self.url = self.rel_url
        self.match_info = None

Это все, что мне нужно на данный момент.

person Jonatan    schedule 24.02.2017