我有一個需要接受在前端的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)
AJAX =異步JavaScript和XML,我敢肯定這不是你想要的。也許你只是指「異步HTTP請求」? – 2011-04-20 12:44:00