問題一:PHPMQTT作為客戶端訂閱超過一定數量的主題后,系統就會報錯。
思路:在網上查找原因,失敗;
打開調試debug = true ; 結果proc方法中報錯: eof receive
問題二:為什么讀不到socket呢?
MQTT為TCP傳輸協議:遵循TCP三次握手協議,所以對MQTT有重新理了一次;
在MQTT群里咨詢,請教大佬;
一個技術大姐:(其實沒我大多少):讓我看看MQTT日志報錯;
於是查看MQTT錯誤日志同時報錯:
2018-07-27 18:43:18.412 [error] <0.3216.9>@emqttd_client:received:340 Client(39.104.65.187:37660): Parser failed for {function_clause,[{emqttd_parser,parse_utf,[<<6>>],[{file,"src/emqttd_parser.erl"},{line,206}]},{emqttd_parser,parse_topics,3,[{file,"src/emqttd_parser.erl"},{line,195}]},{emqttd_parser,parse_frame,3,[{file,"src/emqttd_parser.erl"},{line,147}]},{emqttd_client,received,2,[{file,"src/emqttd_client.erl"},{line,319}]},{gen_server2,handle_msg,2,[{file,"src/gen_server2.erl"},{line,1046}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]}
2018-07-27 18:43:18.413 [error] <0.3216.9>@emqttd_client:received:341 Client(39.104.65.187:37660): Error data: <<0,1,0,6,36,83,89,83,47,35,0,0,17,47,122,113,49,48,48,108,47,100,101,118,47,112,117,98,47,35,0,0,17,47,122,113,49,48,48,108,47,100,101,118,47,114,101,112,47,35,0,0,17,47,122,113,49,48,48,108,47,100,101,118,47,97,115,107,47,35,0,0,17,47,122,113,49,48,48,108,47,100,101,118,47,99,114,100,47,35,0,0,17,47,122,113,49,48,48,108,47,100,101,118,47,116,121,112,47,35,0,0,17,47,122,113,49,48,48,108,47,100,101,118,47,111,117,116,47,35,0>>
發現消息不對稱;
於是再去網上查,也沒有查出原因;
問題三:為什么會Function消息不對稱呢?
網上查了很多,包括國外的網站:git上說是time問題也有的說是mqtt QOS 設置為1。都試過,不行
群里一個大哥回復我了
說是我可能是消息FUNCTION寫錯了
我試過的卻是對的。
然后我給他說,我用其他客戶端沒問題。他對我說,可能是那個庫的問題。讓我分批次訂閱;
問題四:怎么去分批次訂閱
於是我根據不同的方法寫了兩個訂閱主題的方法。測試一下通過了。
經過這次錯誤,明白自己對消息堆棧的理解還不夠,以后要多學習他的源碼。多深入理解。不然遇到問題要不是別人的點撥上,還會出錯。
感謝大家的幫助。


