個別に実行される を作成zmq_forwarder.py
し、アプリからのメッセージを sockJS 接続に渡します。現在、フラスコ アプリが zmq 経由で sockJS からメッセージを受信する方法に取り組んでいます。私の内容を貼り付けていzmq_forwarder.py
ます。ZMQ は初めてで、実行するたびに 100% の CPU 負荷を使用する理由がわかりません。
import zmq
# Prepare our context and sockets
context = zmq.Context()
receiver_from_server = context.socket(zmq.PULL)
receiver_from_server.bind("tcp://*:5561")
forwarder_to_server = context.socket(zmq.PUSH)
forwarder_to_server.bind("tcp://*:5562")
receiver_from_websocket = context.socket(zmq.PULL)
receiver_from_websocket.bind("tcp://*:5563")
forwarder_to_websocket = context.socket(zmq.PUSH)
forwarder_to_websocket.bind("tcp://*:5564")
# Process messages from both sockets
# We prioritize traffic from the server
while True:
# forward messages from the server
while True:
try:
message = receiver_from_server.recv(zmq.DONTWAIT)
except zmq.Again:
break
print "Received from server: ", message
forwarder_to_websocket.send_string(message)
# forward messages from the websocket
while True:
try:
message = receiver_from_websocket.recv(zmq.DONTWAIT)
except zmq.Again:
break
print "Received from websocket: ", message
forwarder_to_server.send_string(message)
ご覧のとおり、4 つのソケットをセットアップしました。アプリはポート 5561 に接続してデータを zmq にプッシュし、ポート 5562 に接続して zmq から受信します (ただし、zmq によって送信されたメッセージをリッスンするように実際に設定する方法をまだ考えています)。一方、sockjs はポート 5564 で zmq からデータを受信し、ポート 5563 でデータを送信します。
zmq.DONTWAIT
メッセージの受信を非同期でノンブロッキングにすることを読んだので、追加しました。
CPU をオーバーロードしないようにコードを改善する方法はありますか? 目標は、zmq を使用してフラスコ アプリと websocket の間でメッセージをやり取りできるようにすることです。