Flutter中使用mqtt_client实现发布topic1并监听topic2可行吗?
可以实现,以下是具体修改方案
区分发布与监听的主题配置
由于现在发布和监听的主题不同,需要将两者分开存储。你可以修改MQTTManager的构造函数,新增对应参数来支持动态配置:MQTTManager( {required String host, required String publishTopic, required String listenTopic, required String identifier, required MQTTAppState state}) : _identifier = 'id', _host = '48.38.96.88', _publishTopic = publishTopic, _listenTopic = listenTopic, _currentState = state;如果暂时不需要动态配置,也可以直接硬编码主题:
// 替换原有的单一_topic定义 final String _publishTopic = 'topic1'; final String _listenTopic = 'topic2';修改连接成功后的订阅逻辑
在onConnected方法中,将订阅的主题从原来的topic1改为topic2:void onConnected() { _currentState.setAppConnectionState(MQTTAppConnectionState.connected); print('EXAMPLE::Mosquitto client connected....'); // 订阅监听topic2 _client!.subscribe(_listenTopic, MqttQos.atLeastOnce); _client!.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) { final MqttPublishMessage recMess = c![0].payload as MqttPublishMessage; final String pt = MqttPublishPayload.bytesToStringAsString(recMess.payload.message!); _currentState.setReceivedText(pt); print( 'EXAMPLE::Change notification:: topic is <${c[0].topic}>, payload is <-- $pt -->'); print(''); }); print( 'EXAMPLE::OnConnected client callback - Client connection was sucessful'); }确保消息发布到topic1
找到你项目中发布消息的代码,确认发布目标是_publishTopic(即topic1),示例发布代码如下:void publishMessage(String message) { final MqttClientPayloadBuilder builder = MqttClientPayloadBuilder(); builder.addString(message); _client!.publishMessage( _publishTopic, MqttQos.atLeastOnce, builder.payload!, ); }
完成以上修改后,你的应用就能向topic1发布消息,同时监听topic2上的回复了。
内容的提问来源于stack exchange,提问作者Johan Scheepers
相关产品推荐
相关产品推荐

