0

mosca mqtt ブローカーを稼働させています。Python クライアントからブローカーに接続し、特定のトピックをサブスクライブしてデータを受信します。データの受信中にデータ損失の問題に直面しています。私のコード

broker_address=""
port = ""

def on_message(client, userdata, message):
    time = datetime.now()
    print("message received at: "+str(time))


def on_connect(client, userdata, flags, rc):
    if rc==0:
        print("connected OK Returned code=",rc)
        time = datetime.now()
        print(time)
    else:
        print("Bad connection Returned code=",rc)

    print("Subscribing to topic","data/#")
    client.subscribe("data/#")


def on_disconnect(client, userdata, rc):
   print("Client Got Disconnected")
   print('rc value '+str(rc))
   time = datetime.now()
   print(time)
   if rc != 0:
       print('Unexpected MQTT disconnection. Will auto-reconnect')

   else:
       print('rc value:' + str(rc))


def mqttConnection():
    client = mqtt.Client(clean_session=True) #create new instance
    client.on_connect = on_connect
    client.on_message = on_message #attach function to callback
    client.on_disconnect = on_disconnect
    print("connecting to broker")
    client.connect(broker_address, port=port) #connect to broker
    client.loop_forever() #stop the loop


if __name__ == "__main__":
    mqttConnection()

そしてコンソール出力

message received at: 2019-11-15 13:31:59.779071
message received at: 2019-11-15 13:31:59.788275
message received at: 2019-11-15 13:31:59.804362
Client Got Disconnected
rc value 1
2019-11-15 13:32:00.819480
Unexpected MQTT disconnection. Will auto-reconnect
connected OK Returned code= 0
2019-11-15 13:32:01.863997
Subscribing to topic data/#
message received at: 2019-11-15 13:32:02.678528
message received at: 2019-11-15 13:32:02.970585
message received at: 2019-11-15 13:32:03.858506
message received at: 2019-11-15 13:32:04.062929
message received at: 2019-11-15 13:32:04.210075
message received at: 2019-11-15 13:32:04.494648
message received at: 2019-11-15 13:32:04.838279
message received at: 2019-11-15 13:32:04.840228
message received at: 2019-11-15 13:32:06.209856
message received at: 2019-11-15 13:32:07.731949
message received at: 2019-11-15 13:32:07.985341
message received at: 2019-11-15 13:32:08.084985
message received at: 2019-11-15 13:32:08.783509
message received at: 2019-11-15 13:32:09.255180
Client Got Disconnected
rc value 1
2019-11-15 13:33:02.293644
Unexpected MQTT disconnection. Will auto-reconnect
connected OK Returned code= 0
2019-11-15 13:33:03.326783
Subscribing to topic data/#
message received at: 2019-11-15 13:33:04.214865
message received at: 2019-11-15 13:33:04.668272
message received at: 2019-11-15 13:33:04.774607
message received at: 2019-11-15 13:33:07.299220

初めて切断されたとき、再接続され、1 秒以内にすぐにメッセージの受信を開始しました。しかし、2 回目の切断では、最後のメッセージと切断コールバックから出力された時間の間に 1 分の時間差があります。この 1 分差のデータは失われます。しかし、MQTT レンズを使用してデータを確認すると、ブローカーのアドレスに接続して同じトピックにサブスクライブすると、その 1 分間のデータも表示されます。したがって、ブローカーによって送信されているデータがありますが、python クライアントはそれを受信できません。1 分後に切断された場合、その 1 分間でそのデータを受信できないのはなぜですか。誰かがこれで私を助けることができますか?

4

0 に答える 0