サーバ側で2つのソケット(異なるポートを使用)を使用して、publisher0を使用して単一のクライアント(サブスクライバ)に非同期でデータをストリーミングします。 :センサーのサンプリングレートが異なっていますが、私はこの特定のケースの開始コードを見つけることができませんでしたが、selectを使うことを示唆しているので、答えが見つかりました。 :2つのファイルを開始した後、コードは加入者と出版社側の両方であっハング、何もプリントアウトされていないマルチソケット(非同期)
publisher.py
import socket
import select
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock1.bind(('', 23000))
sock2.bind(('', 23001))
sock1.listen(1)
sock2.listen(1)
clisock1, (remhost, remport) = sock1.accept()
clisock2, (remhost, remport) = sock2.accept()
clisocks = [clisock1, clisock2]
while 1:
ready_socks,_,_ = select.select(clisocks, [], [])
for sock in ready_socks:
sock.send(b"Hello World\n")
clisock1.close()
clisock2.close()
。
subscriber.py
import socket
import select
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock1.connect(('', 23000))
sock2.connect(('', 23001))
socks = [sock1, sock2]
while True:
ready_socks,_,_ = select.select(socks, [], [])
for sock in ready_socks:
data, addr = sock.recvfrom(100) # This is will not block
print("received message:", data)
私は途方に暮れています、と私は非常にいくつかの提案をいただければ幸いです。
ありがとうございます+100。私はあなたが提案した変更を行いました:コードは今働いています。 – JMarc