MQTT之阿里云接受推送消息

MQTT是一种轻量级的协议(MQ Telemetry Transport),适合于低带宽、不可靠连接、嵌入式设备、CPU、内存资源紧张,适用于各种受限的环境

2、协议特征

(1)消息模型

  MQTT是一种基于代理的发布/订阅的消息协议。提供一对多的消息分发,解除应用程序耦合。一个发布者可以对应多个订阅者,当发布者发生变化的时候,他可以将消息一一通知给所有的订阅者。这种模式提供了更大的网络扩展性和更动态的网络拓扑。

MQTT之阿里云接受推送消息_第1张图片

(2)消息质量

  MQTT提供三种质量的服务:
1)至多一次,可能会出现丢包的现象。使用在对实时性要求不高的情况。这一级别可应用于如下情景,如环境传感器数据,丢失一次读记录无所谓,因为很快下一次读记录就会产生。

  2)至少一次,保证包会到达目的地,但是可能出现重包。

  3)正好一次,保证包会到达目的地,且不会出现重包的现象。这一级别可用于如计费系统等场景,在计费系统中,消息丢失或重复可能会导致生成错误的费用。


(3)主题名称

  主题名称(Topic name)用来标识已发布消息的信息的渠道。订阅者用它来确定接收到所关心的信息。它是一个分层的结构,用斜线“/”作为分隔符。有两种通配符可以在主题发布、订阅时使用:“#”和“+”。前者可以通配多层结构,而后者只能通配一层结构。例如一个topic : “a/b/c”,则“a/+/c”和“a/#”都可以和它相等。发布不支持模糊匹配,必须是确定的主题。

4)遗属

  当一个客户端断开连接的时候,它希望客户端可以发送它指定的消息。该消息和普通消息的结构相同。通过设置该位并填入和信息相关的内容即可。

(5)消息类型

 

Reserved  0  保留
 Connect  1  客户



在做项目时遇到阿里云的MQTT信息接受和推送服务,整了好久没正好,最后一位大神给了一个他新写的DEmo,一用就OK,和大家分享下。

大神的MQTT库的github地址https://github.com/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);

            

        }

    }];



你可能感兴趣的:(即时通讯)