Python:通常のソケットとHTTP接続での非同期送信/受信

ajax asynchronous python sockets
Python:通常のソケットとHTTP接続での非同期送信/受信

フロントエンドでmsg(通常の文字列)を受け入れ、処理を行い、それらのmsgをバックエンドサーバーに送信する必要があるhttpリクエストに変換する必要があるタスクがあります。 したがって、本質的に2つのエンドポイントがあります-フロントエンドは通常のBSDソケットです。 バックエンドはurllib.HTTPconnectionです。 応答は逆になります。 ただし、これは要求と応答のシナリオではありません。 完全に順序が乱れているreq1→ req2→ resp2→ req4→ req3→ resp3→ resp1 …​ 非同期シナリオのタイプ。 だから私はただすることはできません:

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()

しかし、私の知る限り、ある種のselectステートメントにhttp接続を配置することはできません。 それが可能であったとしても、(単一の「http.request(..)」コマンドを使用するのではなく)httpconnectionからどのように個別に送信および受信しますか。

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)

  0  0


ベストアンサー

Pythonのasyncoreモジュールはあなたの問題に適していませんか? または、Twistedのようなフレームワークですか?

1


タイトルとURLをコピーしました