客户端和aiohttp网络服务器之间的短路连接
问题描述:
我在写一个使用aiohttp发布web api的应用程序。我还需要用另一个协议(xmpp)发布相同的API。目前解决方案是将xmpp客户端嵌入到使用常规HTTP连接(aiohttp客户端)连接到web api的同一进程中,并通过xmpp转发响应。但由于它们都在同一个过程中运行,我宁愿如果有办法“短路”连接。客户端和aiohttp网络服务器之间的短路连接
我想创建一个Request实例,并将其传递给aiohttp web应用程序中的方法(可能是_handle()
方法?)来处理它。
有关如何以(最好)非黑客方式做到这一点的任何提示?
答
我现在有什么工作,至少不依赖于私有方法:
req = Request(...)
req.match_info = await app.router.resolve("/api/1.0/status")
response = req.match_info.handler(req)
这工作,但还有改进的余地。我还使用了一个自定义的简化请求类:
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
这就是我现在需要的。