1、MQTT
MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议。
两种 [MQTTKit](https://github.com/jmesnil/MQTTKit) 和[MQTT-Client-Framework](https://github.com/ckrey/MQTT-Client-Framework) 这两种都是OC 使用
因** MQTTKit ** `已经不更新 但是基本使用没问题,综合考虑使用MQTT-Client-Framework。
2、关于MQTT-Client-Framework的使用
iOS上的GitHub示例:https://github.com/novastone-media/MQTT-Client-Framework
3、SDK的引用
通过CocoaPods在工程中引用相关SDK pod 'MQTTClient'
3.1创建一个客户端并连接到服务端口
#import"MQTTClient.h"
MQTTCFSocketTransport *transport = [[MQTTCFSocketTransportalloc]init];
transport.host =@"test.mosquitto.org";
transport.port =1883;
MQTTSession *session = [[MQTTSessionalloc]init];
session.transport = transport;
[sessionconnectWithConnectHandler:^(NSError*error) {
// Do some work
}];
3.2订阅主题
[sessionsubscribeToTopic:@"example/#"atLevel:MQTTQosLevelExactlyOncesubscribeHandler:^(NSError*error,NSArray *gQoss) {
if(error) {
NSLog(@"Subscription failed %@", error.localizedDescription);
}else{
NSLog(@"Subscription sucessfull! Granted Qos: %@",gQoss);
}
}];
3.3收到发送的消息
- (void)newMessage:(MQTTSession *)session data:(NSData*)data onTopic:(NSString*)topic qos:(MQTTQosLevel)qos retained:(BOOL)retained mid:(unsignedint)mid {
// New message received in topic
}
3.4发送消息
[sessionpublishData:someDataonTopic:@"example/#"retain:NOqos:MQTTQosLevelAtMostOncepublishHandler:^(NSError*error) {
}];
3.5自签名URL,请使用MQTTWebsocketTransport的URL属性
MQTTWebsocketTransport *transport =
[[MQTTWebsocketTransport alloc] init];
transport.url =@"wss://aws.iot-amazonaws.com/mqtt?expiry='2018-05-01T23:12:32.950Z'"
MQTTSession *session = [[MQTTSessionalloc]init];
session.transport = transport;
[sessionconnectWithConnectHandler:^(NSError*error) {
// Do some work
}];
4、服务端程序搭建
服务端程序下载链接:https://mosquitto.org/download/
5、MQTT mosquito
Mosquitto是一个开源(BSD许可证)的消息代理,实现MQTT(消息队列遥测传输)协议版本3.1。
MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议,适用于一些条件比较苛刻的环境,进行低带宽、不可靠或间歇性的通信。值得一提的是mqtt提供三种不同质量的消息服务:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
https://blog.csdn.net/yangkunpengD/article/details/87367128
测试
一个完整的MQTT示例包括一个代理器,一个发布者和一个订阅者。测试分为以下几个步骤:
注:在本次测试中,发布者、代理和订阅者均在一台主机上,启用3个终端窗口完成测试。
##启动服务mosquitto。
· 停止服务brew services stop mosquitto
· 启动服务brew services start mosquitto
mosquitto -v
【-v】打印更多的调试信息
##订阅者通过mosquitto_sub订阅指定主题的消息。
mosquitto_sub -v -t test
【-t】指定主题,此处为test【-v】打印更多的调试信息
##发布者通过mosquitto_pub发布指定主题的消息。
mosquitto_pub -t test -m hello
【-t】指定主题 【-m】指定消息内容
##代理服务器把该主题的消息推送到订阅者。