2011-04-20 84 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