²úÆ··ÖÀà+
MQTTÊÇʲô Ò»ÎÄÏê½âMQTTÐÒé
1¡¢MQTT¸ÅÊö
??MQTT(Message Queuing Telemetry Transport£¬ÒôѶÐÐÁÐÒ£²â´«ÊäÐÒé)£¬ÊÇÒ»ÖÖ¸ù¾Ý·¢²¼/¶©ÔÄ(publish/subscribe)ģʽµÄ¡°ÇáÁ¿¼¶¡±Í¨Ñ¶ÐÒ飬¸ÃÐÒé¹¹½¨ÓÚTCP/IPÐÒéÉÏ£¬ÓÉIBMÔÚ1999Äê·¢²¼¡£MQTT×î´ó³¤´¦ÔÚÓÚ£¬Äܹ»ÒÔºÜÉٵĴúÂëºÍÓÐÏ޵Ĵø¿í£¬ÎªÏνÓÔ¶³ÌÉ豸¹©¸øÊµÊ±¿É¿¿µÄÒôѶЧÀÍ¡£×÷ΪһÖֵͿªÏú¡¢µÍ´ø¿íÕ¼Óõļ´Ê±Í¨Ñ¶ÐÒ飬ʹÆäÔÚÎïÁªÍø¡¢Ð¡ÐÍÉ豸¡¢Òƶ¯Ó¦Óõȷ½ÃæÓнϹ㷺µÄÓ¦Óá£
??MQTTÊÇÒ»¸ö¸ù¾Ý¿Í»§¶Ë-ЧÀÍÆ÷µÄÒôѶ·¢²¼/¶©ÔÄ´«ÊäÐÒé¡£MQTTÐÒéÊÇÇáÁ¿¡¢¼òÂÔ¡¢³¨¿ªºÍÒ×ÓÚʵÏֵģ¬ÕâÐ©ÌØµãʹËüÊÊÓ÷¶Î§·Ç³£¹ã·º¡£Ôںܶà×´¿öÏ£¬°üÀ¨ÊÜÏ޵Ļ·¾³ÖУ¬È磺»úÆ÷Óë»úÆ÷(M2M)ͨѶºÍÎïÁªÍø(IoT)¡£ÆäÔÚ£¬¾¹ýÎÀÐÇÁ´Â·Í¨Ñ¶´«¸ÐÆ÷¡¢Å¼È»²¦ºÅµÄÒ½ÁÆÉ豸¡¢ÖÇÄܼҾӡ¢¼°Ò»Ð©Ð¡ÐÍ»¯É豸ÖÐÒѹ㷺ÔËÓá£
??2014Äê·¢²¼µÄMQTT v3.1.1Êǵ±Ç°MQTTÐÒéµÄ×îа汾¡£³ý±ê×¼°æÍ⣬»¹ÓÐÒ»¸ö¼ò»¯°æMQTT-SN£¬¸ÃÐÒéÊ×ÒªÕë¶ÔǶÈëʽÉ豸£¬ÕâЩÉ豸һ°ã×÷ÒµÓÚTCP/IPÍøÂ磬È磺ZigBee¡£
??2¡¢MQTT¹æ»®×¼Ôò
??ÓÉÓÚÎïÁªÍøµÄ»·¾³ÊǷdz£ÌرðµÄ£¬ËùÒÔMQTT×ñÑÒÔϹ滮׼Ôò£º
??(1)¾«¼ò£¬²»Ôö¼Ó¿ÉÓпÉÎ޵ŦÓÃ;
??(2)·¢²¼/¶©ÔÄ(Pub/Sub)ģʽ£¬±ãÀûÒôѶÔÚ´«¸ÐÆ÷Ö®¼ä´«µÝ;
??(3)ÔÊÐíÓû§¶¯Ì¬´´Á¢Ö÷Ì⣬ÁãÔËά³É±¾;
??(4)°Ñ´«ÊäÁ¿½µµ½×îµÍÒÔÌá¸ß´«Ê书ÂÊ;
??(5)°ÑµÍ´ø¿í¡¢¸ßÑÓ³Ù¡¢²»Îȶ¨µÄÍøÂçµÈÒòËØ¿¼ÂÇÔÚÄÚ;
??(6)Ö§³Å½ÓÁ¬µÄ»á»°¿ØÖÆ;
??(7)Àí½â¿Í»§¶Ë¼ÆËã²ÅÄÜ»òÐíºÜµÍ;
??(8)¹©¸øÐ§ÀÍÖÊÁ¿¹ÜÀí;
??(9)¼ÙÉèÊý¾Ý²»¿ÉÖª£¬²»Ç¿Çó´«ÊäÊý¾ÝµÄÀàÐÍÓë¸ñ¾Ö£¬±£³ÖÁé»îÐÔ¡£
??3¡¢MQTTÌØÐÔ
??MQTTÐÒé×÷ÒµÔڵʹø¿í¡¢²»¿É¿¿µÄÍøÂçµÄÔ¶³Ì´«¸ÐÆ÷ºÍ¿ØÖÆÉ豸ͨѶ¶ø¹æ»®µÄÐÒ飬Ëü¾ßÓÐÒÔÏÂÊ×ÒªµÄ¼¸ÏîÌØÐÔ£º
??(1)ÔËÓ÷¢²¼/¶©ÔÄÒôѶģʽ£¬¹©¸øÒ»¶Ô¶àµÄÒôѶ·¢²¼£¬½â³ýÓ¦ÓóÌÐòñîºÏ¡£
??ÕâÒ»µãºÜÀàËÆÓÚXMPP£¬¿ÉÊÇMQTTµÄÐÅÏ¢ÈßÓàԶСÓÚXMPP£¬,ÓÉÓÚXMPPÔËÓÃXML¸ñ¾ÖÎÄÔ±¾´«µÝÊý¾Ý¡£
??(2)¶Ô¸ºÔØÄÚÈÝÆÁ±ÎµÄÒôѶ´«Êä¡£
??(3)ÔËÓÃTCP/IP¹©¸øÍøÂçÏνӡ£
??Ö÷Á÷µÄMQTTÊǸù¾ÝTCPÏνӽøÐÐÊý¾ÝÍÆË͵ģ¬¿ÉÊÇͬÑùÓиù¾ÝUDPµÄ°æ±¾£¬½Ð×öMQTT-SN¡£ÕâÁ½ÖÖ°æ±¾ÓÉÓÚ¸ù¾Ý²»Í¬µÄÏνӰ취£¬ÓÅȱµã×ÔȻҲ¾Í¸÷Óв»Í¬ÁË¡£
??(4)ÓÐÈýÖÖÒôѶ·¢²¼Ð§ÀÍÖÊÁ¿£º
??¡°ÖÁ¶àÒ»´Î¡±£¬ÒôѶ·¢²¼³¹µ×ÒÀ¿¿µ×²ãTCP/IPÍøÂç¡£»á·¢×÷ÒôѶ¶ªµô»òÖØ¸´¡£ÕâÒ»µÈ¼¶¿ÉÓÃÓÚÈçÏÂ×´¿ö£¬»·¾³´«¸ÐÆ÷Êý¾Ý£¬¶ªµôÒ»´Î¶Á¼Ç¼ÎÞËùν£¬ÓÉÓÚ²»¾Ãºó»¹»áÓеÚ2´Î·¢ËÍ¡£ÕâÒ»ÖÖ°ì·¨Ê×ÒªÆÕͨAPPµÄÍÆËÍ£¬ÌÈÈôÄãµÄÖÇÄÜÉ豸ÔÚÒôÑ¶ÍÆËÍʱδÁªÍø£¬ÍÆË͹ýȥûÊÕµ½£¬ÔÙ´ÎÁªÍøÒ²¾ÍÊÕ²»µ½ÁË¡£
??¡°ÖÁÉÙÒ»´Î¡±£¬±£Ö¤ÒôѶµ½´ï£¬µ«ÒôÑ¶ÖØ¸´»òÐí»á·¢×÷¡£
??¡°Ö»ÒªÒ»´Î¡±£¬±£Ö¤ÒôѶµ½´ïÒ»´Î¡£ÔÚһЩҪÇó±È½ÏÑϸñµÄ¼Æ·ÑϵͳÖУ¬Äܹ»ÔËÓô˵ȼ¶¡£ÔڼƷÑϵͳÖУ¬ÒôÑ¶ÖØ¸´»ò¶ªµô»áµ¼Ö²»ÕýÈ·µÄ³É¹û¡£ÕâÖÖ×î¸ßÖÊÁ¿µÄÒôѶ·¢²¼Ð§ÀÍ»¹Äܹ»ÓÃÓÚ¼´Ê±Í¨Ñ¶ÀàµÄAPPµÄÍÆËÍ£¬±£Ö¤Óû§ÊÕµ½ÇÒÖ»»áÊÕµ½Ò»´Î¡£
??(5)СÐÍ´«Ê䣬¿ªÏúºÜС(¹Ì¶¨³¤¶ÈµÄÍ·²¿ÊÇ2×Ö½Ú)£¬ÐÒé½»Á÷×îС»¯£¬ÒÔϽµÍøÂçÁ÷Á¿¡£
??Õâ±ãÊÇΪʲôÔÚ½éÉÜÀï˵Ëü·Ç³£Êʺϡ°ÔÚÎïÁªÍøÁìÓò£¬´«¸ÐÆ÷ÓëЧÀÍÆ÷µÄͨѶ£¬ÐÅÏ¢µÄÊÕ¼¯¡±£¬ÒªÖªµÀǶÈëʽÉ豸µÄÔËËã²ÅÄܺʹø¿í¶¼Ïà¶Ôµ¥±¡£¬ÔËÓÃÕâÖÖÐÒéÀ´´«µÝÒôѶÔÙÊʺϲ»¹ýÁË¡£
??(6)ÔËÓÃLast WillºÍTestamentÌØÐÔ֪ͨÓйظ÷·½¿Í»§¶ËÒì³£ÖжϵĻúÖÆ¡£
??Last Will£º¼´ÒÅÑÔ»úÖÆ£¬ÓÃÓÚ֪ͨͬһÖ÷ÌâÏÂµÄÆäËûÉ豸·¢ËÍÒÅÑÔµÄÉ豸ÒѾ¶Ï¿ªÁËÏνӡ£
??Testament£ºÒÅÑÔ»úÖÆ£¬¹¦ÓÃÀàËÆÓÚLast Will¡£
??4¡¢MQTTÐÒéÔÀí
??4.1 MQTTÐÒéʵÏÖ°ì·¨
??ʵÏÖMQTTÐÒéÐèÇó¿Í»§¶ËºÍЧÀÍÆ÷¶ËͨѶÍê³É£¬ÔÚͨѶ¹ý³ÌÖУ¬MQTTÐÒéÖÐÓÐÈýÖÖÉí·Ý£º·¢²¼Õß(Publish)¡¢ÊðÀí(Broker)(ЧÀÍÆ÷)¡¢¶©ÔÄÕß(Subscribe)¡£ÆäÖУ¬ÒôѶµÄ·¢²¼ÕߺͶ©ÔÄÕß¶¼Êǿͻ§¶Ë£¬ÒôѶÊðÀíÊÇЧÀÍÆ÷£¬ÒôѶ·¢²¼ÕßÄܹ»Í¬Ê±ÊǶ©ÔÄÕß¡£
??MQTT´«ÊäµÄÒôѶ·ÖΪ£ºÖ÷Ìâ(Topic)ºÍ¸ºÔØ(payload)Á½²¿·Ö£º
??(1)Topic£¬Äܹ»Àí½âΪÒôѶµÄÀàÐÍ£¬¶©ÔÄÕß¶©ÔÄ(Subscribe)ºó£¬¾Í»áÊÕµ½¸ÃÖ÷ÌâµÄÒôѶÄÚÈÝ(payload);
??(2)payload£¬Äܹ»Àí½âΪÒôѶµÄÄÚÈÝ£¬ÊÇÖ¸¶©ÔÄÕß¾ßÌåÒªÔËÓõÄÄÚÈÝ¡£
??4.2 ÍøÂç´«ÊäÓëÓ¦ÓÃÒôѶ
??MQTT»á¹¹½¨µ×²ãÍøÂç´«Ê䣺Ëü½«Ê÷Á¢¿Í»§¶Ëµ½Ð§ÀÍÆ÷µÄÏνӣ¬¹©¸øÁ½ÕßÖ®¼äµÄÒ»¸öÓÐÐòµÄ¡¢ÎÞËðµÄ¡¢¸ù¾Ý×Ö½ÚÊ¡µÄË«Ïò´«Êä¡£
??µ±Ó¦ÓÃÊý¾Ý¾¹ýMQTTÍøÂç·¢ËÍʱ£¬MQTT»á°ÑÓëÖ®Ïà¹ØµÄЧÀÍÖÊÁ¿(QoS)ºÍÖ÷Âä¿î(Topic)Ïà¸Éϵ¡£
??4.3MQTT¿Í»§¶Ë
??Ò»¸öÔËÓÃMQTTÐÒéµÄÓ¦ÓóÌÐò»òÐíÉ豸£¬Ëü×ÜÊÇÊ÷Á¢µ½Ð§ÀÍÆ÷µÄÍøÂçÏνӡ£¿Í»§¶ËÄܹ»£º
??(1)·¢²¼ÆäËû¿Í»§¶Ë»òÐí»á¶©ÔĵÄÐÅÏ¢;
??(2)¶©ÔÄÆäËü¿Í»§¶Ë·¢²¼µÄÒôѶ;
??(3)Í˶©»òɾ³ýÓ¦ÓóÌÐòµÄÒôѶ;
??(4)¶Ï¿ªÓëЧÀÍÆ÷Ïνӡ£
??4.4 MQTTЧÀÍÆ÷
??MQTTЧÀÍÆ÷ÒÔ³ÆÎª¡°ÒôѶÊðÀí¡±(Broker)£¬¿ÉËùÒÔÒ»¸öÓ¦ÓóÌÐò»òһ̨É豸¡£ËüÊÇ×øÂäÒôѶ·¢²¼ÕߺͶ©ÔÄÕßÖ®¼ä£¬ËüÄܹ»£º
??(1)½ÓÊÜÀ´×Ô¿Í»§µÄÍøÂçÏνÓ;
??(2)½ÓÊܿͻ§·¢²¼µÄÓ¦ÓÃÐÅÏ¢;
??(3)´¦ÀíÀ´×Ô¿Í»§¶ËµÄ¶©ÔĺÍÍ˶©ÇëÇó;
??(4)Ïò¶©ÔĵĿͻ§×ª·¢Ó¦ÓóÌÐòÒôѶ¡£
??4.5 MQTTÐÒéÖеĶ©ÔÄ¡¢Ö÷Ìâ¡¢»á»°
??£¨1£©¶©ÔÄ(Subscription)
??¶©ÔİüÀ¨Ö÷ÌâÌôÑ¡Æ÷(Topic Filter)ºÍ×î´óЧÀÍÖÊÁ¿(QoS)¡£¶©ÔÄ»áÓëÒ»¸ö»á»°(Session)Ïà¹Ø¡£Ò»¸ö»á»°Äܹ»°üÀ¨¶à¸ö¶©ÔÄ¡£Ã¿Ò»¸ö»á»°ÖеÄÿ¸ö¶©ÔͼÓÐÒ»¸ö²»Í¬µÄÖ÷ÌâÌôÑ¡Æ÷¡£
??£¨2£©»á»°(Session)
??ÿ¸ö¿Í»§¶ËÓëЧÀÍÆ÷Ê÷Á¢ÏνӺó±ãÊÇÒ»¸ö»á»°£¬¿Í»§¶ËºÍЧÀÍÆ÷Ö®¼äÓÐ×´¿ö½»»¥¡£»á»°´æÔÚÓÚÒ»¸öÍøÂçÖ®¼ä£¬Ò²»òÐíÔÚ¿Í»§¶ËºÍЧÀÍÆ÷Ö®¼ä¿ç¹ý¶à¸ö½ÓÁ¬µÄÍøÂçÏνӡ£
??£¨3£©Ö÷Âä¿î(Topic Name)
??Ïνӵ½Ò»¸öÓ¦ÓóÌÐòÒôѶµÄ±êÇ©£¬¸Ã±êÇ©ÓëЧÀÍÆ÷µÄ¶©ÔÄÏàÆ¥Å䡣ЧÀÍÆ÷»á½«ÒôѶ·¢Ë͸ø¶©ÔÄËùÆ¥Åä±êÇ©µÄÿ¸ö¿Í»§¶Ë¡£
??£¨4£©Ö÷ÌâÌôÑ¡Æ÷(Topic Filter)
??Ò»¸ö¶ÔÖ÷Âä¿îͨÅä·ûÌôÑ¡Æ÷£¬ÔÚ¶©Ôıí´ïʽÖÐÔËÓ㬱íÃ÷¶©ÔÄËùÆ¥Åäµ½µÄ¶à¸öÖ÷Ìâ¡£
??£¨5£©¸ºÔØ(Payload)
??ÒôѶ¶©ÔÄÕßËù¾ßÌå½ÓÊÕµÄÄÚÈÝ¡£
??4.6 MQTTÐÒéÖеİ취
??MQTTÐÒéÖнç˵ÁËһЩ°ì·¨(Ò²±»³ÆÎª¶¯×÷)£¬À´ÓÚ±íÃ÷¶ÔÈ·¶¨×ÊÔ´Ëù½øÐвÙ×÷¡£Õâ¸ö×ÊÔ´Äܹ»´ú±íÔ¤ÏÈ´æÔÚµÄÊý¾Ý»ò¶¯Ì¬Éú³ÉÊý¾Ý£¬ÕâÈ¡¾öÓÚЧÀÍÆ÷µÄʵÏÖ¡£Í¨³£À´Ëµ£¬×ÊԴָЧÀÍÆ÷ÉϵÄÎļþ»òÊä³ö¡£Ê×Òª°ì·¨ÓУº
??1)Connect¡£µÈ´ýÓëЧÀÍÆ÷Ê÷Á¢Ïνӡ£
??2)Disconnect¡£µÈ´ýMQTT¿Í»§¶ËÍê³ÉËù×öµÄ×÷Òµ£¬²¢ÓëЧÀÍÆ÷¶Ï¿ªTCP/IP»á»°¡£
??3)Subscribe¡£µÈ´ýÍê³É¶©ÔÄ¡£
??4)UnSubscribe¡£µÈ´ýЧÀÍÆ÷³·Ïú¿Í»§¶ËµÄÒ»¸ö»ò¶à¸ötopics¶©ÔÄ¡£
??5)Publish¡£MQTT¿Í»§¶Ë·¢ËÍÒôѶÇëÇ󣬷¢ËÍÍê³Éºó·µ»ØÓ¦ÓóÌÐòÏ̡߳£