0

試してみrequestsましたが、tcp接続に時間がかかるため遅いようです(ソケットを開いたままにする方法がわかりません)

私は今しようzerorpcとしていますが、それはの概念を持っていpersistent connectionます。
Django <-> node.js 通信は最初のメッセージでは正常に機能しますが、2 回目の試行でエラーが発生して失敗しLost remote after 10s heartbeatます。

私はおそらく明らかな何かを見逃しています。

# following connection step is done in python a module so that it gets called only one time 
import zerorpc

client = zerorpc.Client()
client.connect("tcp://127.0.0.1:7015")

def something(...):
   # this gets called for a http request, and we are messaging node.js using the zerorpc client.
   ...
   client.call_rpc(message)

他のクライアント (コマンド ラインから) は引き続きサーバーと通信して応答を取得できるため、上記の django コードに関係していると思います。

4

1 に答える 1

2

zerorpc は協調的な非同期 IO に gevent を使用しますが、django は一度に 1 つの要求を処理します。django が一部の IO を処理している場合、zerorpc は CPU 時間を公平に分配できず、ハートビートを処理できません。zerorpc-python でハートビートをオフにすることは可能ですが (まさにこの理由で)、zerorpc-node ではできません!

1 つの解決策は、gevent ioloop の上で django を実行することです。http://gunicorn.org/ が役立つようです。

于 2015-04-03T08:38:11.020 に答える