的Python:异步发送/接收正常插座和HTTP连接
我有一个需要接受在前端的MSG(普通字符串),做一些处理和转换那些封邮件到需要被发送到一个HTTP请求的任务后端服务器。所以基本上有两个端点 - 前端是一个正常的BSD套接字。后端是一个urllib.HTTP连接。回应是相反的。但是,这不是一个请求响应场景。我可以有一个完全失灵req1-> req2-> resp2-> req4-> req3-> resp3-> resp1 ...异步场景的类型。因此,我不能只是做一个:的Python:异步发送/接收正常插座和HTTP连接
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(..)”命令)。
如果我发送的HttpConnection的一些Ajax请求,将在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)
是不是Python的异步模块适合您的问题?或者像Twisted这样的框架?
我听到扭曲可以说是相当少数的学习 - 因此,如果剩下的唯一的选择,我必须这样做。我不知道asyncore。我会(在这里仍然是一个蟒蛇初学者),看看它..尝试下面的HttpClient上docs.python.org,但其影响的例子还没有沉没。将再试一次。 – 2011-04-20 17:36:22
AJAX =异步JavaScript和XML,我敢肯定这不是你想要的。也许你只是指“异步HTTP请求”? – 2011-04-20 12:44:00