{"id":2912,"date":"2022-04-18T14:18:48","date_gmt":"2022-04-18T06:18:48","guid":{"rendered":"https:\/\/aif.amtbbs.org\/?p=2912"},"modified":"2022-04-18T14:18:48","modified_gmt":"2022-04-18T06:18:48","slug":"%e7%89%a9%e8%81%94%e7%bd%91%e7%bd%91%e5%85%b3%e5%a6%82%e4%bd%95%e4%b8%8e%e4%ba%91%e5%b9%b3%e5%8f%b0%e8%bf%9b%e8%a1%8c%e4%ba%a4%e4%ba%92%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/aif.amtbbs.org\/index.php\/2022\/04\/18\/2912\/","title":{"rendered":"\u7269\u8054\u7f51\u7f51\u5173\u5982\u4f55\u4e0e\u4e91\u5e73\u53f0\u8fdb\u884c\u4ea4\u4e92\uff1f"},"content":{"rendered":"<p><span class=\"hrefStyle\">\u7269\u8054\u7f51<\/span>\u7f51\u5173\u5f00\u53d1\uff1a\u57fa\u4e8eMQTT\u6d88\u606f\u603b\u7ebf\u7684\u8bbe\u8ba1\u8fc7\u7a0b\uff08\u4e0a\uff09\uff0c\u6211\u4eec\u804a\u4e86\u5728\u4e00\u4e2a\u7269\u8054\u7f51\u7cfb\u7edf\u7684\u7f51\u5173\u4e2d\uff0c\u5982\u4f55\u5229\u7528 MQTT \u6d88\u606f\u603b\u7ebf\uff0c\u5728\u5d4c\u5165\u5f0f\u7cfb\u7edf\u5185\u90e8\u5b9e\u73b0\u591a\u4e2a\u8fdb\u7a0b\u4e4b\u95f4\u7684\u76f8\u4e92\u901a\u4fe1\u95ee\u9898\u3002<\/p>\n<p>\u8fd9\u4e2a\u901a\u4fe1\u6a21\u578b\u7684\u6700\u5927\u51e0\u4e2a\u4f18\u70b9\u662f\uff1a<\/p>\n<p>\u6a21\u5757\u4e4b\u95f4\u89e3\u8026\u5408\uff1b\u5404\u6a21\u5757\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u5f00\u53d1\uff1b\u628a TCP \u94fe\u63a5\u548c\u7c98\u5305\u95ee\u9898\u4ea4\u7ed9\u6d88\u606f\u603b\u7ebf\u5904\u7406\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5904\u7406\u4e1a\u52a1\u5c42\u7684\u4e1c\u897f\uff1b\u8c03\u8bd5\u65b9\u4fbf\uff1b<\/p>\n<p>\u4ee5\u4e0a\u53ea\u662f\u63cf\u8ff0\u4e86\u5728\u4e00\u4e2a\u5d4c\u5165\u5f0f\u7cfb\u7edf\u5185\u90e8\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\u65b9\u5f0f\uff0c\u90a3\u4e48\u7f51\u5173\u5982\u4f55\u4e0e\u4e91\u5e73\u53f0\u8fdb\u884c\u4ea4\u4e92\u5462\uff1f<\/p>\n<p>\u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d\u5df2\u7ecf\u63d0\u5230\u8fc7\uff1a\u7f51\u5173\u4e0e\u4e91\u5e73\u53f0\u4e4b\u95f4\u7684\u901a\u4fe1\u65b9\u5f0f\u4e00\u822c\u90fd\u662f\u5ba2\u6237\u6307\u5b9a\u7684\uff0c\u5c31\u90a3\u4e48\u51e0\u79cd\uff08\u963f\u91cc\u4e91\u3001\u534e\u4e3a\u4e91\u3001\u817e\u8baf\u4e91\u3001\u4e9a\u9a6c\u900aAWS\u5e73\u53f0\uff09\u3002\u4e00\u822c\u90fd\u8981\u6c42\u7f51\u5173\u4e0e\u4e91\u5e73\u53f0\u4e4b\u95f4\u5904\u4e8e\u957f\u8fde\u63a5\u7684\u72b6\u6001\uff0c\u8fd9\u6837\u4e91\u7aef\u7684\u5404\u79cd\u6307\u4ee4\u5c31\u53ef\u4ee5\u968f\u65f6\u53d1\u9001\u5230\u7f51\u5173\u3002<\/p>\n<p>\u8fd9\u4e00\u7bc7\u6587\u7ae0\uff0c\u6211\u4eec\u5c31\u6765\u804a\u4e00\u804a\u8fd9\u90e8\u5206\u5185\u5bb9\u3002<\/p>\n<p><strong>\u4e8c\u3001\u4e0e\u4e91\u5e73\u53f0\u4e4b\u95f4\u7684 MQTT \u8fde\u63a5<\/strong><\/p>\n<p>\u76ee\u524d\u7684\u51e0\u5927\u7269\u8054\u7f51\u4e91\u5e73\u53f0\uff0c\u90fd\u63d0\u4f9b\u4e86\u4e0d\u540c\u7684\u63a5\u5165\u65b9\u5f0f\u3002\u5bf9\u4e8e\u7f51\u5173\u6765\u8bf4\uff0c\u5e94\u7528\u6700\u591a\u7684\u5c31\u662f MQTT \u63a5\u5165\u3002<\/p>\n<p>\u6211\u4eec\u77e5\u9053\uff0cMQTT \u53ea\u662f\u4e00\u4e2a\u534f\u8bae\u800c\u5df2\uff0c\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u90fd\u6709\u5b9e\u73b0\uff0c\u5728 C \u8bed\u8a00\u4e2d\u4e5f\u6709\u597d\u51e0\u4e2a\u5b9e\u73b0\u3002<\/p>\n<p>\u5728\u7f51\u5173\u5185\u90e8\uff0c\u8fd0\u884c\u7740\u4e00\u4e2a\u540e\u53f0 deamon\uff1a MQTT Broker\uff0c\u5176\u5b9e\u5c31\u662f mosquitto \u8fd9\u4e2a\u53ef\u6267\u884c\u7a0b\u5e8f\uff0c\u5b83\u5145\u5f53\u7740\u6d88\u606f\u603b\u7ebf\u7684\u529f\u80fd\u3002\u8fd9\u91cc\u8bf7\u5927\u5bb6\u6ce8\u610f\uff1a\u56e0\u4e3a\u8fd9\u4e2a\u6d88\u606f\u603b\u7ebf\u662f\u8fd0\u884c\u5728\u5d4c\u5165\u5f0f\u7cfb\u7edf\u7684\u5185\u90e8\uff0c\u63a5\u5165\u603b\u7ebf\u7684\u5ba2\u6237\u7aef\u5c31\u662f\u9700\u8981\u76f8\u4e92\u901a\u4fe1\u7684\u90a3\u4e9b\u8fdb\u7a0b\u3002\u8fd9\u4e9b\u8fdb\u7a0b\u7684\u6570\u91cf\u662f\u6709\u9650\u7684\uff0c\u5373\u4f7f\u662f\u4e00\u4e2a\u6bd4\u8f83\u590d\u6742\u7684\u7cfb\u7edf\uff0c\u6700\u591a\u5341\u51e0\u4e2a\u8fdb\u7a0b\u4e5f\u5c31\u5dee\u4e0d\u591a\u4e86\u3002\u56e0\u6b64\uff0cmosquitto \u8fd9\u4e2a\u5b9e\u73b0\u662f\u5b8c\u5168\u53ef\u4ee5\u652f\u6491\u7cfb\u7edf\u8d1f\u8f7d\u7684\u3002<\/p>\n<p>\u90a3\u4e48\uff0c\u5982\u679c\u5728\u4e91\u7aef\u90e8\u7f72\u4e00\u4e2a MQTT Broker\uff0c\u7406\u8bba\u4e0a\u662f\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528 mosquitto \u8fd9\u4e2a\u5b9e\u73b0\u6765\u4f5c\u4e3a\u6d88\u606f\u603b\u7ebf\u7684\uff0c\u4f46\u662f\u4f60\u8981\u8bc4\u4f30\u63a5\u5165\u7684\u5ba2\u6237\u7aef\uff08\u4e5f\u5c31\u662f\u7f51\u5173\uff09\u5728\u4e00\u4e2a\u4ec0\u4e48\u6837\u7684\u6570\u91cf\u7ea7\uff0c\u8003\u8651\u5230\u5e76\u53d1\u7684\u95ee\u9898\uff0c\u4e00\u5b9a\u8981\u505a\u538b\u529b\u6d4b\u8bd5\u3002<\/p>\n<p>\u5bf9\u4e8e\u540e\u53f0\u5f00\u53d1\uff0c\u6211\u7684\u7ecf\u9a8c\u4e0d\u591a\uff0c\u4e0d\u6562\uff08\u4e5f\u4e0d\u80fd\uff09\u591a\u8a00\uff0c\u8bef\u5bfc\u5927\u5bb6\u5c31\u7f6a\u8fc7\u4e86\u3002\u4e0d\u8fc7\uff0c\u5bf9\u4e8e\u4e00\u822c\u7684\u5b66\u4e60\u548c\u6d4b\u8bd5\u6765\u8bf4\uff0c\u5728\u4e91\u7aef\u76f4\u63a5\u90e8\u7f72 mosquitto \u4f5c\u4e3a\u6d88\u606f\u603b\u7ebf\uff0c\u662f\u6ca1\u6709\u95ee\u9898\u7684\u3002<\/p>\n<p><strong>\u4e09\u3001Proc\uff3fBridge \u8fdb\u7a0b\uff1a\u5916\u90e8\u548c\u5185\u90e8\u6d88\u606f\u603b\u7ebf\u4e4b\u95f4\u7684\u6865\u63a5\u5668<\/strong><\/p>\n<p>\u4e0b\u9762\u8fd9\u5f20\u56fe\uff0c\u8bf4\u660e\u4e86 Proc\uff3fBridge \u8fdb\u7a0b\u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\u7684\u4f5c\u7528\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2914\" src=\"https:\/\/aiforumimage.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/2022\/04\/wx_article__f913165ec46433f917324c765c755d8d.jpg\" width=\"912\" height=\"772\" srcset=\"https:\/\/aiforumimage.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/2022\/04\/wx_article__f913165ec46433f917324c765c755d8d.jpg 912w, https:\/\/aiforumimage.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/2022\/04\/wx_article__f913165ec46433f917324c765c755d8d-300x254.jpg 300w, https:\/\/aiforumimage.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/2022\/04\/wx_article__f913165ec46433f917324c765c755d8d-768x650.jpg 768w\" sizes=\"auto, (max-width: 912px) 100vw, 912px\" \/><\/p>\n<p>\u4ece\u4e91\u5e73\u53f0\u6d88\u606f\u603b\u7ebf\u63a5\u6536\u5230\u7684\u6d88\u606f\uff0c\u9700\u8981\u8f6c\u53d1\u5230\u5185\u90e8\u7684\u6d88\u606f\u603b\u7ebf\uff1b\u4ece\u5185\u90e8\u6d88\u606f\u603b\u7ebf\u63a5\u6536\u5230\u7684\u6d88\u606f\uff0c\u9700\u8981\u8f6c\u53d1\u5230\u4e91\u5e73\u53f0\u7684\u6d88\u606f\u603b\u7ebf\uff1b<\/p>\n<p>\u5982\u679c\u7528 mosquitto \u6765\u5b9e\u73b0\uff0c\u5e94\u8be5\u5982\u4f55\u6765\u5b9e\u73b0\u5462\uff1f<\/p>\n<p>1\uff0e mosquitto \u7684 API \u63a5\u53e3<\/p>\n<p>mosquitto \u8fd9\u4e2a\u5b9e\u73b0\u662f\u57fa\u4e8e\u56de\u8c03\u51fd\u6570\u7684\u673a\u5236\u6765\u8fd0\u884c\u7684\uff0c\u4f8b\u5982\uff1a<\/p>\n<p>\uff0f\uff0f \u8fde\u63a5\u6210\u529f\u65f6\u7684\u56de\u8c03\u51fd\u6570void my\uff3fconnect\uff3fcallback\uff08struct mosquitto \uff0amosq\uff0c void \uff0aobj\uff0c int rc\uff09\uff5b \u00a0 \u00a0\uff0f\uff0f \uff0e\uff0e\uff0e\uff5d<br \/>\n\uff0f\uff0f \u8fde\u63a5\u5931\u8d25\u65f6\u7684\u56de\u8c03\u51fd\u6570void my\uff3fdisconnect\uff3fcallback\uff08struct mosquitto \uff0amosq\uff0c void \uff0aobj\uff0c int result\uff09\uff5b \u00a0 \u00a0\uff0f\uff0f \uff0e\uff0e\uff0e\uff5d<br \/>\n\uff0f\uff0f \u63a5\u6536\u5230\u6d88\u606f\u65f6\u7684\u56de\u8c03\u51fd\u6570void my\uff3fmessage\uff3fcallback\uff08struct mosquitto \uff0amosq\uff0c void \uff0aobj\uff0c const struct mosquitto\uff3fmessage \uff0amessage\uff09\uff5b \u00a0\uff0f\uff0f \uff0e\uff0e\uff5d<br \/>\nint main\uff08\uff09\uff5b \u00a0 \u00a0\uff0f\uff0f \u5176\u4ed6\u4ee3\u7801 \u00a0 \u00a0\uff0f\uff0f \uff0e\uff0e\uff0e \u00a0 \u00a0 \u00a0 \u00a0\uff0f\uff0f \u521b\u5efa\u4e00\u4e2a mosquitto \u5bf9\u8c61 \u00a0 \u00a0struct mosquitto g\uff3fmosq \uff1d mosquitto\uff3fnew\uff08\uff02client\uff3fname\uff02\uff0c true\uff0c NULL\uff09\uff1b \u00a0 \u00a0 \u00a0 \u00a0\uff0f\uff0f \u6ce8\u518c\u56de\u8c03\u51fd\u6570 \u00a0 \u00a0mosquitto\uff3fconnect\uff3fcallback\uff3fset\uff08g\uff3fmosq\uff0c my\uff3fconnect\uff3fcallback\uff09\uff1b \u00a0 \u00a0mosquitto\uff3fdisconnect\uff3fcallback\uff3fset\uff08g\uff3fmosq\uff0c my\uff3fdisconnect\uff3fcallback\uff09\uff1b \u00a0 \u00a0mosquitto\uff3fmessage\uff3fcallback\uff3fset\uff08g\uff3fmosq\uff0c my\uff3fmessage\uff3fcallback\uff09\uff1b \u00a0 \u00a0\uff0f\uff0f \u8fd9\u91cc\u8fd8\u6709\u5176\u4ed6\u7684\u56de\u8c03\u51fd\u6570\u8bbe\u7f6e \u00a0 \u00a0 \u00a0\uff0f\uff0f \u5f00\u59cb\u8fde\u63a5\u5230\u6d88\u606f\u603b\u7ebf \u00a0 \u00a0mosquitto\uff3fconnect\uff08g\uff3fmosq\uff0c \uff02127\uff0e0\uff0e0\uff0e1\uff02\uff0c 1883\uff0c 60\uff09\uff1b \u00a0 \u00a0 \u00a0while\uff081\uff09 \u00a0 \u00a0\uff5b \u00a0 \u00a0 \u00a0int rc \uff1d mosquitto\uff3floop\uff08g\uff3fmosq\uff0c \uff0d1\uff0c 1\uff09\uff1b \u00a0 \u00a0 \u00a0if \uff08rc\uff09 \uff5b \u00a0 \u00a0 \u00a0 \u00a0printf\uff08\uff02mqtt\uff3fportal\uff1a mosquitto\uff3floop rc \uff1d \uff05d \uff02\uff0c rc\uff09\uff1b \u00a0 \u00a0 \u00a0 \u00a0sleep\uff081\uff09\uff1b \u00a0 \u00a0 \u00a0 \u00a0mosquitto\uff3freconnect\uff08g\uff3fmosq\uff09\uff1b \u00a0 \u00a0 \u00a0\uff5d \u00a0 \u00a0\uff5d \u00a0 \u00a0mosquitto\uff3fdestroy\uff08g\uff3fmosq\uff09\uff1b \u00a0 \u00a0mosquitto\uff3flib\uff3fcleanup\uff08\uff09\uff1b \u00a0 \u00a0return 0\uff1b\uff5d<\/p>\n<p>\u4ee5\u4e0a\u4ee3\u7801\u5c31\u662f\u4e00\u4e2a mosquitto \u5ba2\u6237\u7aef\u7684\u6700\u7b80\u4ee3\u7801\u4e86\uff0c\u4f7f\u7528\u56de\u8c03\u51fd\u6570\u7684\u673a\u5236\uff0c\u8ba9\u7a0b\u5e8f\u7684\u5f00\u53d1\u975e\u5e38\u7b80\u5355\u3002<\/p>\n<p>mosquitto \u628a\u5e95\u5c42\u7684\u7ec6\u8282\u95ee\u9898\u90fd\u5e2e\u52a9\u6211\u4eec\u5904\u7406\u4e86\uff0c\u53ea\u8981\u6211\u4eec\u6ce8\u518c\u7684\u51fd\u6570\u88ab\u8c03\u7528\u4e86\uff0c\u5c31\u8bf4\u660e\u53d1\u751f\u4e86\u6211\u4eec\u611f\u5174\u8da3\u7684\u4e8b\u4ef6\u3002<\/p>\n<p>\u8fd9\u6837\u7684\u56de\u8c03\u673a\u5236\u5728\u5404\u79cd\u5f00\u6e90\u8f6f\u4ef6\u4e2d\u4f7f\u7528\u7684\u6bd4\u8f83\u591a\uff0c\u6bd4\u5982\uff1aglib \u91cc\u7684\u5b9a\u65f6\u5668\u3001libevent\u901a\u8baf\u5904\u7406\u3001libmodbus \u91cc\u7684\u6570\u636e\u5904\u7406\u3001linux \u5185\u6838\u4e2d\u7684\u9a71\u52a8\u5f00\u53d1\u548c\u5b9a\u65f6\u5668\uff0c\u90fd\u662f\u8fd9\u4e2a\u5957\u8def\uff0c\u4e00\u901a\u767e\u901a\uff01<\/p>\n<p>\u5728\u7f51\u5173\u4e2d\u7684\u6bcf\u4e2a\u8fdb\u7a0b\uff0c\u53ea\u9700\u8981\u6dfb\u52a0\u4e0a\u9762\u8fd9\u90e8\u5206\u4ee3\u7801\uff0c\u5c31\u53ef\u4ee5\u6302\u8f7d\u5230\u6d88\u606f\u603b\u7ebf\u4e0a\uff0c\u4ece\u800c\u53ef\u4ee5\u4e0e\u5176\u5b83\u8fdb\u7a0b\u8fdb\u884c\u6536\u53d1\u6570\u636e\u4e86\u3002<\/p>\n<p>2\uff0e \u5229\u7528 UserData \u6307\u9488\uff0c\u5b9e\u73b0\u591a\u4e2a MQTT \u8fde\u63a5<\/p>\n<p>\u4e0a\u9762\u7684\u5b9e\u4f8b\u4ec5\u4ec5\u662f\u8fde\u63a5\u5230\u4e00\u4e2a\u6d88\u606f\u603b\u7ebf\u4e0a\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u666e\u901a\u7684\u8fdb\u7a0b\u6765\u8bf4\uff0c\u8fbe\u5230\u4e86\u901a\u4fe1\u7684\u76ee\u7684\u3002<\/p>\n<p>\u4f46\u662f\u5bf9\u4e8e Proc\uff3fBridge \u8fdb\u7a0b\u6765\u8bf4\uff0c\u8fd8\u6ca1\u6709\u8fbe\u5230\u76ee\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u6865\u63a5\u7684\u4f4d\u7f6e\uff0c\u9700\u8981\u540c\u65f6\u8fde\u63a5\u5230\u8fdc\u7a0b\u548c\u672c\u5730\u8fd9\u4e24\u4e2a\u6d88\u606f\u603b\u7ebf\u4e0a\u3002\u90a3\u4e48\u5e94\u8be5\u5982\u4f55\u5b9e\u73b0\u5462\uff1f<\/p>\n<p>\u770b\u4e00\u4e0b mosquitto\uff3fnew \u8fd9\u4e2a\u51fd\u6570\u7684\u7b7e\u540d\uff1a<\/p>\n<p>\uff0a obj \uff0d A user pointer that will be passed as an argument to any \uff0a \u00a0 \u00a0 \u00a0callbacks that are specified\uff0e\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u7684\u4f5c\u7528\u662f\uff1a\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u7528\u6237\u81ea\u5df1\u7684\u6570\u636e\uff08\u4f5c\u4e3a\u6307\u9488\u4f20\u5165\uff09\uff0c\u90a3\u4e48mosquitto \u5728\u56de\u8c03\u6211\u4eec\u7684\u6ce8\u518c\u7684\u4efb\u4f55\u4e00\u4e2a\u51fd\u6570\u65f6\uff0c\u90fd\u4f1a\u628a\u8fd9\u4e2a\u6307\u9488\u4f20\u5165\u3002<br \/>\n\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u8fd9\u4e2a\u53c2\u6570\u6765\u533a\u5206\u8fd9\u4e2a\u8fde\u63a5\u662f\u8fdc\u7a0b\u8fde\u63a5\uff1f\u8fd8\u662f\u672c\u5730\u8fde\u63a5\u3002libmosq\uff3fEXPORT struct mosquitto \uff0amosquitto\uff3fnew\uff08const char \uff0aid\uff0c bool clean\uff3fsession\uff0c void \uff0aobj\uff09\uff1b<\/p>\n<p>\u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u7ed3\u6784\u4f53\u53d8\u91cf\uff0c\u628a\u4e00\u4e2a MQTT \u8fde\u63a5\u7684\u6240\u6709\u4fe1\u606f\u90fd\u8bb0\u5f55\u5728\u8fd9\u91cc\uff0c\u7136\u540e\u6ce8\u518c\u7ed9 mosquitto\u3002\u5f53 mosquitto \u56de\u8c03\u51fd\u6570\u65f6\uff0c\u628a\u8fd9\u4e2a\u7ed3\u6784\u4f53\u53d8\u91cf\u7684\u6307\u9488\u56de\u4f20\u7ed9\u6211\u4eec\uff0c\u8fd9\u6837\u5c31\u62ff\u5230\u4e86\u8fd9\u4e2a\u8fde\u63a5\u7684\u6240\u6709\u6570\u636e\uff0c\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6765\u8bf4\uff0c\u8fd9\u4e5f\u662f\u4e00\u79cd\u9762\u5411\u5bf9\u8c61\u7684\u601d\u60f3\u3002<\/p>\n<p>\uff0f\uff0f \u4ece\u6765\u8868\u793a\u4e00\u4e2a MQTT \u8fde\u63a5\u7684\u7ed3\u6784\u4f53typedef struct\uff5b \u00a0char \uff0aid\uff1b \u00a0char \uff0aname\uff1b \u00a0char \uff0apw\uff1b \u00a0char \uff0ahost\uff1b \u00a0int port\uff1b \u00a0pthread\uff3ft tHandle\uff1b \u00a0struct mosquitto \uff0amosq\uff1b \u00a0int mqtt\uff3fnum\uff1b\uff5dMQData\uff1b<\/p>\n<p>\u5b8c\u6574\u7684\u4ee3\u7801\u5df2\u7ecf\u653e\u5230\u7f51\u76d8\u91cc\u4e86\uff0c\u4e3a\u4e86\u8ba9\u4f60\u5148\u4ece\u539f\u7406\u4e0a\u770b\u660e\u767d\uff0c\u6211\u628a\u5173\u952e\u51e0\u4e2a\u5730\u65b9\u7684\u4ee3\u7801\u8d34\u5728\u8fd9\u91cc\uff1a<\/p>\n<p>\uff0f\uff0f \u5206\u914d\u7ed3\u6784\u4f53\u53d8\u91cfMQData userData \uff1d \uff08MQData \uff0a\uff09malloc\uff08sizeof\uff08MQData\uff09\uff09\uff1b<br \/>\n\uff0f\uff0f \u8bbe\u7f6e\u5c5e\u4e8e\u8fd9\u91cc\u8fde\u63a5\u7684\u53c2\u6570\uff1a id\uff0c name \u7b49\u7b49<br \/>\n\uff0f\uff0f \u521b\u5efa mosquitto \u5bf9\u8c61\u65f6\uff0c\u4f20\u5165 userData\u3002struct mosquitto \uff0amosq \uff1d mosquitto\uff3fnew\uff08userData\uff0d\uff1eid\uff0c true\uff0c userData\uff09\uff1b<br \/>\n\uff0f\uff0f \u5728\u56de\u8c03\u51fd\u6570\u4e2d\uff0c\u628a obj \u6307\u9488\u524d\u8f6c\u6210 MQData \u6307\u9488static void messageCB\uff08struct mosquitto \uff0amosq\uff0c void \uff0aobj\uff0c const struct mosquitto\uff3fmessage \uff0amessage\uff09\uff5b \u00a0MQData \uff0auserData \uff1d \uff08MQData \uff0a\uff09obj\uff1b \u00a0 \u00a0\uff0f\uff0f \u6b64\u65f6\u5c31\u53ef\u4ee5\u6839\u636e userData \u6307\u9488\u4e2d\u7684\u5185\u5bb9\u5206\u8fa8\u51fa\u8fd9\u662f\u54ea\u4e00\u4e2a\u94fe\u63a5\u4e86\uff5d<\/p>\n<p>\u53e6\u5916\u4e00\u4e2a\u95ee\u9898\uff1a\u4e0d\u77e5\u9053\u4f60\u662f\u5426\u6ce8\u610f\u5230\u793a\u4f8b\u4e2d\u7684 mosquitto\uff3floop\uff08\uff09 \u8fd9\u4e2a\u51fd\u6570\uff1f\u8fd9\u4e2a\u51fd\u6570\u9700\u8981\u653e\u5728 while \u6b7b\u5faa\u73af\u4e2d\u4e0d\u505c\u7684\u8c03\u7528\uff0c\u624d\u80fd\u51fa\u53d1 mosuiqtto \u5185\u90e8\u7684\u4e8b\u4ef6\u3002\uff08\u5176\u5b9e\u5728 mosuiqtto \u4e2d\uff0c\u8fd8\u63d0\u4f9b\u4e86\u53e6\u4e00\u4e2a\u7b80\u5316\u7684\u51fd\u6570 mosquitto\uff3floop\uff3fforever\uff09\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4\uff1a\u5728\u6bcf\u4e2a\u8fde\u63a5\u4e2d\uff0c\u9700\u8981\u6301\u7eed\u7684\u89e6\u53d1 mosquitto \u5e95\u5c42\u7684\u4e8b\u4ef6\uff0c\u624d\u80fd\u8ba9\u6d88\u606f\u7cfb\u7edf\u987a\u5229\u7684\u6536\u53d1\u3002\u56e0\u6b64\uff0c\u5728\u793a\u4f8b\u4ee3\u7801\u4e2d\uff0c\u4f7f\u7528\u4e24\u4e2a\u7ebf\u7a0b\u5206\u522b\u8fde\u63a5\u5230\u4e91\u5e73\u53f0\u7684\u603b\u7ebf\u548c\u5185\u90e8\u7684\u603b\u7ebf\u3002<\/p>\n<p><strong>\u56db\u3001\u603b\u7ed3<\/strong><\/p>\n<p>\u7ecf\u8fc7\u8fd9\u7bc7\u6587\u7ae0\uff0c\u57fa\u672c\u4e0a\u628a\u4e00\u4e2a\u7269\u8054\u7f51\u7cfb\u7edf\u7684\u7f51\u5173\u4e2d\uff0c\u6700\u57fa\u672c\u7684\u901a\u4fe1\u6a21\u578b\u804a\u5b8c\u4e86\uff0c\u76f8\u5f53\u4e8e\u662f\u4e00\u4e2a\u7a0b\u5e8f\u7684\u9aa8\u67b6\u5427\uff0c\u5269\u4e0b\u7684\u4e8b\u60c5\u5c31\u662f\u5904\u7406\u4e1a\u52a1\u5c42\u7684\u7ec6\u8282\u95ee\u9898\u4e86\u3002<\/p>\n<p>\u4e07\u91cc\u957f\u5f81\uff0c\u8fd9\u624d\u662f\u7b2c\u4e00\u6b65\uff01<\/p>\n<p>\u5bf9\u4e8e\u4e00\u4e2a\u7f51\u5173\u6765\u8bf4\uff0c\u8fd8\u6709\u5176\u4ed6\u66f4\u591a\u7684\u95ee\u9898\u9700\u8981\u5904\u7406\uff0c\u6bd4\u5982\uff1aMQTT \u8fde\u63a5\u7684\u9274\u6743\uff08\u7528\u6237\u540d\uff0b\u5bc6\u7801\uff0c\u8bc1\u4e66\uff09\u3001\u901a\u4fe1\u6570\u636e\u7684\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316\u3001\u52a0\u5bc6\u548c\u89e3\u5bc6\u7b49\u7b49\uff0c\u4ee5\u540e\u6162\u6162\u804a\u5427\uff0c\u5e0c\u671b\u6211\u4eec\u4e00\u8def\u524d\u884c\uff01<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_2912\" class=\"pvc_stats total_only  \" data-element-id=\"2912\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.0\" viewBox=\"0 0 502 315\" preserveAspectRatio=\"xMidYMid meet\"><g transform=\"translate(0,332) scale(0.1,-0.1)\" fill=\"\" stroke=\"none\"><path d=\"M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z\"\/><path d=\"M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z\"\/><path d=\"M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z\"\/><path d=\"M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z\"\/><path d=\"M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z\"\/><path d=\"M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z\"\/><path d=\"M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z\"\/><path d=\"M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z\"\/><path d=\"M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z\"\/><\/g><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/aif.amtbbs.org\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u7269\u8054\u7f51\u7f51\u5173\u5f00\u53d1\uff1a\u57fa\u4e8eMQTT\u6d88\u606f\u603b\u7ebf\u7684\u8bbe\u8ba1\u8fc7\u7a0b\uff08\u4e0a\uff09\uff0c\u6211\u4eec\u804a\u4e86\u5728\u4e00\u4e2a\u7269\u8054\u7f51\u7cfb\u7edf\u7684\u7f51\u5173\u4e2d\uff0c\u5982\u4f55\u5229\u7528 MQTT \u6d88 [&hellip;]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_2912\" class=\"pvc_stats total_only  \" data-element-id=\"2912\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.0\" viewBox=\"0 0 502 315\" preserveAspectRatio=\"xMidYMid meet\"><g transform=\"translate(0,332) scale(0.1,-0.1)\" fill=\"\" stroke=\"none\"><path d=\"M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z\"\/><path d=\"M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z\"\/><path d=\"M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z\"\/><path d=\"M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z\"\/><path d=\"M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z\"\/><path d=\"M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z\"\/><path d=\"M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z\"\/><path d=\"M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z\"\/><path d=\"M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z\"\/><\/g><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/aif.amtbbs.org\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":3,"featured_media":2914,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-2912","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-11"],"_links":{"self":[{"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/posts\/2912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/comments?post=2912"}],"version-history":[{"count":1,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/posts\/2912\/revisions"}],"predecessor-version":[{"id":2915,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/posts\/2912\/revisions\/2915"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/media\/2914"}],"wp:attachment":[{"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/media?parent=2912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/categories?post=2912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aif.amtbbs.org\/index.php\/wp-json\/wp\/v2\/tags?post=2912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}