IoT:我需要使用MQTT还是HTTP?
我正在研制一种能够感知和收集环境信息(如温度、湿度等)的设备 该设备没有连接任何电源,但它有一个电池和一个太阳能电池板为其充电 它大部分时间几乎处于深度睡眠状态,只有在需要感知和传输数据时才会醒来。此操作大约需要1-2分钟,然后再次进入睡眠状态 我不是这方面的专家,但我认为如果设备需要随时可以访问以接收来自某个主题的消息,那么MQTT应该是一个不错的选择,但在我的场景中,它只读取传感器,并定期向服务器发送数据IoT:我需要使用MQTT还是HTTP?,http,mqtt,iot,Http,Mqtt,Iot,我正在研制一种能够感知和收集环境信息(如温度、湿度等)的设备 该设备没有连接任何电源,但它有一个电池和一个太阳能电池板为其充电 它大部分时间几乎处于深度睡眠状态,只有在需要感知和传输数据时才会醒来。此操作大约需要1-2分钟,然后再次进入睡眠状态 我不是这方面的专家,但我认为如果设备需要随时可以访问以接收来自某个主题的消息,那么MQTT应该是一个不错的选择,但在我的场景中,它只读取传感器,并定期向服务器发送数据 目前我通过HTTP发送数据,但我想知道实现MQTT是否有意义?在这种情况下,我应该比H
目前我通过HTTP发送数据,但我想知道实现MQTT是否有意义?在这种情况下,我应该比HTTP有什么优势吗?关于MQTT和HTTP的文献很多,您应该深入了解它们的详细信息,但下面是您的应用程序的一些要点 MQTT
- MQTT允许持久连接,这可以通过HTTP节省大量资源。如果您使用的是SSL,这是最相关的
- 如果您只发送几个指标,MQTT通常比HTTP的带宽效率更高
- 由于MQTT是为交付数据(而不是整个页面)而设计的,因此其发布/订阅模型提供了许多有用的内置功能,如保留和最后意志
- MQTT还提供了一种实现加密、身份验证和访问控制的简单方法
- MQTT适用于连接可能断断续续或不可靠的情况。它的各种服务质量级别为您提供了确保可靠发送数据的重要方法李>
- 根据我的经验,在更大的应用程序中,MQTT代理提供了更简单的管理。我特别喜欢有一套标准化的衡量绩效的指标
- MQTT的topic/subtopic值结构有助于组织您的数据,并便于在多个项目之间扩大规模和共享资源李>
- 这可能是个人偏好,但我发现MQTT协议比使用HTTP更容易理解、故障排除和编程。特别是,Python Paho MQTT库非常简单,运行良好
- 几乎到处都支持,这确保了与防火墙的兼容性。如果要在不受控制的网络上部署,这一点可能很重要
- 这是一个更常见的协议,因此您(和您的最终用户)可能已经对它感到满意。类似地,您可能已经了解了安全模型,这将使其更易于安全
- 不同的MQTT实现之间存在一些差异,这可能会造成困难(例如,我使用MOSQUITO,当人们谈论他们的HiveMQ设置时,有时会感到困惑)。HTTP给我的印象是更具普遍性,并且有更多的人可以帮助您
我对游戏不熟悉,但我喜欢mqtt收集数据和向设备发送信息 我正在使用synapses rf200芯片(自愈网状网络),我已经通过将一个rf200芯片串行连接到esp8266 wifi芯片,搭建了一座桥梁 基本上,我将mqtt_in和mqtt_out作为主题,我的c#xamarin iOs/android应用程序连接到mqtt代理,使用mqtt_in从rf200请求信息(进入rf200网状网络),节点使用mqtt_out响应(离开rf200网状网络)我收集所有信息作为字符串,并根据需要进行解析,然后将其转换为我需要的任何内容 它的开销非常低,而且mqtt代理非常容易设置。我们已经从性能和能耗的角度对普通服务器和Raspberry Pi板上的SSL进行了测试。结果取决于进程运行的用例和设备 关于您的用例,我们也有特殊的测试=>通过HTTP、HTTP批处理或MQTT传递许多消息(多个探测)。结果非常简单,如果您可以在一个HTTP请求中发送数据,那么这将是最好的选择。MQTT排在第二位,具有每条消息传递的HTTP的能效比MQTT低得多,速度也慢得多 我认为MQTT最适合您。您可以使用eclipse paho库。。 这门课可以帮助你 公共类PahoMqttClient{
private static final String TAG = "PahoMqttClient";
private MqttAndroidClient mqttAndroidClient;
私有字符串broker\u用户名、broker\u密码;
公共MqttAndroidClient getMqttClient(上下文上下文、字符串brokerUrl、字符串clientId、字符串broker_密码){
}您可能会在物联网网站上发现有趣的内容。如果您没有得到有关堆栈溢出的任何答案,您也可以在那里提问。物联网网站可能会更关注您感兴趣的位。这并没有回答您提出的问题。
this.broker_userName=clientId;
this.broker_password=broker_password;
mqttAndroidClient = new MqttAndroidClient(context, brokerUrl, clientId);
try {
IMqttToken token = mqttAndroidClient.connect(getMqttConnectionOption(), null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
Log.d(TAG, "Success");
}
@Override
public void onFailure(IMqttToken iMqttToken, Throwable exception) {
Log.d(TAG, "Failure " + exception.toString());
}
});
} catch (MqttException e) {
e.printStackTrace();
}
return mqttAndroidClient;
}
public void disconnect(@NonNull MqttAndroidClient client) throws MqttException {
IMqttToken mqttToken = client.disconnect();
mqttToken.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
Log.d(TAG, "Successfully disconnected");
}
@Override
public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
Log.d(TAG, "Failed to disconnected " + throwable.toString());
}
});
}
@NonNull
private DisconnectedBufferOptions getDisconnectedBufferOptions() {
DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
disconnectedBufferOptions.setBufferEnabled(true);
disconnectedBufferOptions.setBufferSize(100);
disconnectedBufferOptions.setPersistBuffer(false);
disconnectedBufferOptions.setDeleteOldestMessages(false);
return disconnectedBufferOptions;
}
@NonNull
private MqttConnectOptions getMqttConnectionOption() {
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setCleanSession(false);
mqttConnectOptions.setAutomaticReconnect(true);
mqttConnectOptions.setKeepAliveInterval(120);
//mqttConnectOptions.setWill(Constants.PUBLISH_TOPIC, "I am going offline".getBytes(), 1, true);
mqttConnectOptions.setUserName(broker_userName);
mqttConnectOptions.setPassword(broker_password.toCharArray());
return mqttConnectOptions;
}
public void publishMessage(@NonNull MqttAndroidClient client, @NonNull String msg, int qos, @NonNull String topic)
throws MqttException, UnsupportedEncodingException {
byte[] encodedPayload = new byte[0];
encodedPayload = msg.getBytes("UTF-8");
MqttMessage message = new MqttMessage(encodedPayload);
message.setId(320);
message.setRetained(false);
message.setQos(qos);
try {
client.publish(topic, message);
}catch (Exception e){ Log.e("PUB", e.getMessage());}
}
public void subscribe(@NonNull MqttAndroidClient client, @NonNull final String topic, int qos) throws MqttException {
IMqttToken token = client.subscribe(topic, qos);
token.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
Log.d(TAG, "Subscribe Successfully " + topic);
}
@Override
public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
Log.e(TAG, "Subscribe Failed " + topic);
}
});
}
public void unSubscribe(@NonNull MqttAndroidClient client, @NonNull final String topic) throws MqttException {
IMqttToken token = client.unsubscribe(topic);
token.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
Log.d(TAG, "UnSubscribe Successfully " + topic);
}
@Override
public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
Log.e(TAG, "UnSubscribe Failed " + topic);
}
});
}