Python:在普通套接字和http连接上异步发送/接收
我有一个任务,需要在前端接受MSG(普通字符串),进行一些处理,并将这些MSG转换为需要发送到后端服务器的http请求。所以基本上有两个端点-前端是一个普通的BSD套接字。后端是一个urllib.HTTPconnection。反应正好相反。但是,这不是请求-响应场景。我可能会有一个完全无序的req1->req2->resp2->req4->req3->resp3->resp1。。。异步场景的类型。所以我不能只做一个:Python:在普通套接字和http连接上异步发送/接收,python,ajax,sockets,asynchronous,Python,Ajax,Sockets,Asynchronous,我有一个任务,需要在前端接受MSG(普通字符串),进行一些处理,并将这些MSG转换为需要发送到后端服务器的http请求。所以基本上有两个端点-前端是一个普通的BSD套接字。后端是一个urllib.HTTPconnection。反应正好相反。但是,这不是请求-响应场景。我可能会有一个完全无序的req1->req2->resp2->req4->req3->resp3->resp1。。。异步场景的类型。所以我不能只做一个: msg = socketFrontEnd.recv() ... process
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连接放在某种select语句中。即使这是可能的,您如何从httpconnection单独发送和接收(而不是使用单个“http.request(…)”命令)
如果我在httpconnection上发送一些ajax请求,如果我在socketFrontEnd上被阻塞,ajax请求中的回调会运行吗?也就是说,我们可以做一些类似于:
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)
while(True):
msg=socketFrontEnd.recv()Python的异步内核模块不适合您的问题吗?或者像Twisted这样的框架?AJAX=异步JavaScript和XML,我很确定这不是您想要的。也许你的意思是“异步HTTP请求”?我听说twisted很难学习-所以如果这是唯一的选择,我就必须去做。我不知道asyncore的事。我将查找它(这里仍然是python初学者)。。在docs.python.org上尝试了遵循HTTPclient的示例,但其含义尚未被理解。我会再试一次。