2017-02-23 2 views
1

J'écris une application qui utilise aiohttp pour publier une API Web. J'ai aussi besoin de publier la même API avec un autre protocole (xmpp). Actuellement, la solution consiste à intégrer un client xmpp dans le même processus que celui qui se connecte à l'API Web à l'aide d'une connexion HTTP normale (client aiohttp) et à transmettre la réponse via xmpp. Mais comme ils fonctionnent tous les deux dans le même processus, je préférerais qu'il y ait un moyen de "court-circuiter" la connexion.Connexion en court-circuit entre le client et le serveur Web aiohttp

Je pense à quelque chose comme la création d'une instance de demande et de le passer à une méthode dans l'application web aiohttp (peut-être la méthode _handle()?) Pour le traiter.

Des conseils sur la façon de le faire d'une manière (de préférence) non-hackish?

Répondre

0

Je travaille maintenant quelque chose au moins ne dépend pas des méthodes privées:

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

Cela fonctionne, mais il y a place à l'amélioration. J'utilise également une classe de requête personnalisée et simplifiée:

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 

C'est tout ce dont j'ai besoin pour le moment.