我可以进行单独的回调来处理每个 MQTT 主题吗?

物联网 MQTT ESP8266 微控制器
2021-06-02 13:17:02

在一些 ESP-01 模块上使用PubSubClient来制作房子周围的智能/连接设备。我不太喜欢所有传入消息都路由到单个回调的方式。当我收到消息时,我必须解析主题并在 switch 语句中处理每个主题。可能有更好的方法来做到这一点,但我还没有想到任何事情。

如果我可以为每个订阅的主题分配一个单独的回调,那就太好了。现在我只有一个字符串列表,最后一个项目是“END”,我循环订阅列表中的项目,直到我点击 END。这很好,但我希望最终能够从网络动态加载主题,所以我不能有一个硬编码的列表或 switch 语句。

有没有办法做到这一点?我知道我需要对每个潜在主题进行回调,但这很好,我只是不知道如何将回调分配给我订阅的主题。

1个回答

简短的回答不,库只接受一个回调,它将传入消息的主题作为参数传递。

更长的答案,没有什么可以阻止你自己实施这个。

您只是在callback函数中有一个很大的 if/else 块,它根据topic传递给callback函数值为每个主题调用单独的方法

您所描述的内容无论如何都不会让您动态分配主题,您仍然需要为每个可能的主题(或至少每个可能采取的操作,可以映射到所需主题)的预定义函数