emqx总是莫名的踢掉一些我正在使用的客户端,并且日志里面有错误信息

在使用emqx作为mqtt服务的情况下,其他功能都正常,但是服务端总是莫名的踢掉我正在使用的客户端,(我下端会收到代理主动断开连接 这样的消息),至于怎么解决这个问题以及这个问题产生的原因我看了一下运行日志,日志里面有error信息,但是我看不明白,一下附上日志错误信息 Parse failed for function_clause, [{emqx_frame,parse_packet,[{mqtt_packet_header,0,false,2,false},<<0>>,#{max_size => 1048576,strict_mode => false,version => 4}],[{file,“emqx_frame.erl”},{line,222}]},{emqx_frame,parse_frame,4,[{file,“emqx_frame.erl”},{line,199}]},{emqx_connection,parse_incoming,3,[{file,“emqx_connection.erl”},{line,649}]},{emqx_connection,handle_msg,2,[{file,“emqx_connection.erl”},{line,642}]},{emqx_connection,process_msg,2,[{file,“emqx_connection.erl”},{line,388}]},{emqx_connection,handle_recv,3,[{file,“emqx_connection.erl”},{line,352}]},{proc_lib,wake_up,3,[{file,“proc_lib.erl”},{line,236}]}], Frame data:<<4,1,0,80,142,251,220,110,0>>

出现 Parse failed for... 这个日志一般都是报文格式错误导致的,所以 EMQX 会主动关闭这些异常连接。

上述的“报文格式”具体的指的是什么呢?我交互的信息采用json格式,你是指这个格式有问题还是底层的格式呢?

这个指的是底层的 MQTT 报文格式,Payload 默认不会去解析里面的内容的

那我怎么才能解决,或者说规避这个问题呢?我不知道是怎么产生的这个格式错误。我下端的客户端是使用mosquitto实现的。

这个就需要抓包来看,看到底客户端发出来的报文内容是什么,哪里有问题

mqtt协议解析是否有可用的工具提供呢?我可以抓包,但是我没解析过mqtt

Wireshark 抓包 MQTT 的报文是可以直接看的