Python: асинхронная отправка / получение по обычному сокету и HTTP-соединению - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть задача, которая должна принимать сообщения MSG (обычные строки) на внешнем интерфейсе, выполнять некоторую обработку и преобразовывать эти сообщения MSG в запросы HTTP, которые необходимо отправить на внутренний сервер.Таким образом, по существу есть две конечные точки - фронтенд - это обычный BSD-сокет.Backend - это соединение urllib.HTTP.Ответы идут обратным путем.Однако это не сценарий «запрос-ответ».Я мог бы иметь совершенно неупорядоченный тип асинхронного сценария req1-> req2-> resp2-> req4-> req3-> resp3-> resp1 ....Поэтому я не могу просто сделать:

msg = socketFrontEnd.recv()
... process msg and make 'Request' 
resp, content = httpBackEnd.request("http://example.org", "PUT", body=Request)   
... process resp and make 'Response'
socketFrontEnd.send(Response)

Мне нужно что-то более похожее на механизм опроса:

While(True):
   readysockets = select(SocketFrontEnd, httpBackEnd)

   if readysockets has SocketFrontEnd:
       msg = socketFrontEnd.recv()
       process and send request to httpBackEnd(...)

   if readysockets has httpBackEnd:
       resp = httpBackEnd(...)
       process and send response to socketFrontEnd()

Однако, насколько мне известно, я не могу поставитьHTTP-соединение в каком-то утверждении выбора.Даже если бы это было возможно, как вы отдельно отправляете и получаете от httpconnection (вместо использования одной команды «http.request (..)»).

Что если я отправлю какой-нибудь ajax-запрос по httpconnection, будет ли выполнен этот обратный вызов в ajax-запросе, если я заблокирован на socketFrontEnd?То есть мы можем сделать что-то вроде:

while(True):
    msg = socketFrontEnd.recv() <-- blocked
    ... process and make 'Request'
    ajax('callback_function', Request, 'http://backendserver.com')


Callback_function(resp):
    ... process and make Response
    socketFrontEnd.send(Response)

1 Ответ

1 голос
/ 20 апреля 2011

Асинхронный модуль Python не подходит для вашей проблемы?Или рамки типа Twisted?

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