2011-04-20 65 views
0

我有一个需要接受在前端的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) 
+0

AJAX =异步JavaScript和XML,我敢肯定这不是你想要的。也许你只是指“异步HTTP请求”? – 2011-04-20 12:44:00

回答

1

是不是Python的异步模块适合您的问题?或者像Twisted这样的框架?

+0

我听到扭曲可以说是相当少数的学习 - 因此,如果剩下的唯一的选择,我必须这样做。我不知道asyncore。我会(在这里仍然是一个蟒蛇初学者),看看它..尝试下面的HttpClient上docs.python.org,但其影响的例子还没有沉没。将再试一次。 – 2011-04-20 17:36:22