MQTT是一种轻量级的协议(MQTelemetryTransport),适合于低带宽、不可靠连接、嵌入式设备、CPU、内存资源紧张,适用于各种受限的环境。
2、协议特征
(1)消息模型
MQTT是一种基于代理的发布/订阅的消息协议。提供一对多的消息分发,解除应用程序耦合。一个发布者可以对应多个订阅者,当发布者发生变化的时候,他可以将消息一一通知给所有的订阅者。这种模式提供了更大的网络扩展性和更动态的网络拓扑。
(2)消息质量
MQTT提供三种质量的服务:
1)至多一次,可能会出现丢包的现象。使用在对实时性要求不高的情况。这一级别可应用于如下情景,如环境传感器数据,丢失一次读记录无所谓,因为很快下一次读记录就会产生。
2)至少一次,保证包会到达目的地,但是可能出现重包。
3)正好一次,保证包会到达目的地,且不会出现重包的现象。这一级别可用于如计费系统等场景,在计费系统中,消息丢失或重复可能会导致生成错误的费用。
(3)主题名称
主题名称(Topic name)用来标识已发布消息的信息的渠道。订阅者用它来确定接收到所关心的信息。它是一个分层的结构,用斜线“/”作为分隔符。有两种通配符可以在主题发布、订阅时使用:“#”和“+”。前者可以通配多层结构,而后者只能通配一层结构。例如一个topic : “a/b/c”,则“a/+/c”和“a/#”都可以和它相等。发布不支持模糊匹配,必须是确定的主题。
4)遗属
当一个客户端断开连接的时候,它希望客户端可以发送它指定的消息。该消息和普通消息的结构相同。通过设置该位并填入和信息相关的内容即可。
(5)消息类型
在做项目时遇到阿里云的MQTT信息接受和推送服务,整了好久没正好,最后一位大神给了一个他新写的DEmo,一用就OK,和大家分享下。
大神的MQTT库的github地址/ckrey/MQTT-Client-Framework,你把它用Cocoapods编译一下就行了。
下面是代码的注册信息,特别提示我这里的self.KClientID,self.KTopic是活的可变的,大家可以根据自己的情况决定。
MQTTCFSocketTransport *transport = [[MQTTCFSocketTransportalloc] init];
transport.host =KServerHost;
transport.port =1883;
MQTTSession *session = [[MQTTSessionalloc] init];
session.transport = transport;
session.clientId=self.KClientID;
session.userName=KName;
session.password=Kpassword;
session.delegate =self;
[sessionconnectAndWaitTimeout:20];//this is part of the synchronous API
[sessionsubscribeToTopic:self.KTopicatLevel:2subscribeHandler:^(NSError *error,NSArray<NSNumber *> *gQoss) {
if (error) {
NSLog(@"Subscription failed %@", error.localizedDescription);
}else {
NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);
}
}];
如果觉得《MQTT之阿里云接受推送消息》对你有帮助,请点赞、收藏,并留下你的观点哦!