gpt4 book ai didi

python - 如何保持 node.js 和 python 之间的连接状态?

转载 作者:行者123 更新时间:2023-12-04 15:02:16 24 4
gpt4 key购买 nike

我有基于 Node.js 和基于 python 的硬件的 Web 应用程序。我想保持网络服务器和硬件之间的连接状态。如果硬件与 Web 应用程序断开连接,则 Web 应用程序应该收到事件或通知,因此我可以基于此向用户发送通知。我使用 mqtt 进行数据通信,但为​​了保持连接状态,我不能使用 MQTT,因为它与代理连接。我不想增加服务器的负载。

我应该使用哪些工具/技术/协议(protocol)/方法来保持设备离线或在线的连接状态?。我还希望在用户尝试使用 Web 应用程序将数据发送到硬件时使用,如果设备未与服务器连接,则用户应该根据连接状态收到设备离线的通知。

最佳答案

以下代码演示了我在评论中暗示的过程。

LWT 功能告诉代理在 1.5 倍的保活周期内未能响应时发布一条消息,将客户端标记为离线。如果客户端完全断开连接,则需要将其自身标记为离线。客户端在连接到代理时将其自身标记为在线。

所有状态消息都设置了保留位,因此当客户端订阅状态主题时,它们将始终被传送。

import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("some/application/topic")
# set status message to online
client.publish("status/client1", payload="online", retain=True)

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))

if str(msg.payload) == "shutdown":
# update status to offline as this will be a clean dissconect
client.publish("status/client1", payload="offline", retain=True)
client.disconnect()

client = mqtt.Client(client_id="client1")
client.on_connect = on_connect
client.on_message = on_message
client.will_set("status/client1", payload="offline", retain=True)

client.connect("mqtt.eclipse.org", 1883, 60)

# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()

将由 OP 来实现关于向问题末尾请求的离线客户端发送消息的通知。

关于python - 如何保持 node.js 和 python 之间的连接状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66777952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com