当前位置: 首页 > 知识库问答 >
问题:

如何强制MQTT代理不从Android Paho客户端清除会话?

怀晋
2023-03-14

我是MQTT的新手,但很明显“CleanSession”连接参数是控制这一点的:除非“清理”一个会话,否则在没有订阅的情况下,您将获得发布到主题的所有内容。在Linux客户端,向mosquitto_new(...,clean_session,...)传递“true”确实会阻止Linux客户端获得连接前消息。但是在Android端,当MqttConnectOptions实例传递给。Connect()时,调用。SetCleanSession(boolean)不起作用。

我用的是泛美卫生组织的1.1.+。根据https://github.com/eclipse/paho.mqtt.android.git的repo中的标记,V1.1.1是最新的版本。

implementation "org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.+"
implementation "org.eclipse.paho:org.eclipse.paho.android.service:1.1.+"

我怀疑这只是Android Paho库中的一个bug(它似乎已经四年没有被开发过了。)但我希望我错了!有办法完成我想要的吗?

共有1个答案

柯景龙
2023-03-14

关于清洗旗帜的事。客户端和服务器可以存储会话状态,以使可靠的消息传递能够在一系列网络连接中继续进行。此位用于控制会话状态的生存期。

如果CleanSession设置为0,服务器必须根据当前会话的状态(由客户端标识符标识)恢复与客户端的通信。如果没有与客户端标识符关联的会话,服务器必须创建一个新会话。客户端和服务器必须在客户端和服务器断开连接后存储会话。断开CleanSession设置为0的会话后,服务器必须存储更多的QoS1和QoS2消息,这些消息与断开连接时客户端拥有的任何订阅相匹配,作为会话状态的一部分。它还可以存储满足相同标准的QoS 0消息。

有关清洗的更多信息,请访问:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/csprd02/mqtt-v3.1.1-csprd02.html

 类似资料:
  • 我后来理解对了。实际上,我需要一条来自android客户端的MQTT消息发送到所有其他客户端,所以我想在消息正文中包含publish关键字,这是非常错误的。MQTT本身将接收到的消息发送给所有提供的客户端,如果客户端订阅了该主题的话。

  • 我有一个常规的云服务器设置,我有一个移动应用程序通过HTTP请求与服务器交谈。我也有一个Wifi设备,我需要发送消息,我想通过MQTT做到这一点。当移动应用程序发生一些变化时,我希望云服务器通过MQTT发布一个主题,这样wifi设备就可以接收消息。经纪人也可以是客户吗?我是不是理解错了?

  • 我是PHP领域的新手,在连接到MQTT时遇到了一些问题。 错误为:stream_socket_client():无法连接到TCP://...*:8083(连接超时) 在下面的代码中面临问题:

  • 安装:composer require imiphp/imi-mqtt 项目配置文件: [ 'components' => [ 'MQTT' => 'Imi\MQTT', ], ] MQTT 功能要求 PHP >= 7.2 使用 事件监听类: <?php namespace Imi\MQTT\Test; use Imi\MQTT\Client\Con

  • 我在artemis代理中添加了一个mqtt拦截器,以便拦截mqtt客户端连接: 我的客户端apache paho通过这个端口“WS://0.0.0.0:61614”连接到代理。 我的问题是只截获发布到主题的消息。 为什么不截获连接消息?

  • 我如何用C#将消息发布到外部托管的MQTT代理(在我的例子中是VirtualBox--在openwrt之上)?