Open Arcaneing opened 10 months ago
问题描述 在uni-app中,通过npm i mqtt@version 引入mqtt后。 在微信小程序端连接mqtt(wss)服务时,出现了与服务器通讯的异常(可以正常建立http连接,但无法收到任何返回数据)。 疑似压缩编译工具包导致了部分代码错误。 mqtt日志显示数据包损毁
复现步骤
建立新uni-app项目,选择vue2
npm install mqtt@3.0.0 (除了过高版本微信api不支持之外,其他版本均有此问题,如需手机端适配需要使用4.1.0)
尝试建立mqtt(wss / wxs)连接
... import mqtt from 'mqtt'; ... mqttClient = mqtt.connect('wxs://mqtt.xxx.xxx/mqtt', options); mqttClient.on('connect', () => { console.log('MQTT connected'); Vue.prototype.$bus.$emit('mqtt-connect', "connect"); });
编译运行至微信小程序
客户端发送数据
Request: Request URL: wss://mqtt.xxx.xxx/mqtt Request Method: GET Status Code: 101 Switching Protocols
Response: HTTP/1.1 101 Switching Protocols Server: nginx/1.18.0 (Ubuntu) Date: Sun, 31 Dec 2023 21:44:23 GMT Connection: upgrade sec-websocket-accept: ***** sec-websocket-protocol: mqtt upgrade: websocket
message: send: 00000000: 10 00000000: 2700 0000 # 问题点:此处被补充满了八位,,正常情况下应当只发送27 00000000: 0004 00000000: 4d51 5454 00000000: 04 00000000: c2 00000000: 003c 00000000: 000f 00000000: 6d71 7474 6a73 5f33 6330 3237 3939 34 #id 00000000: 0004 00000000: 00000000: 0004 00000000: 连接断开,无任何响应数据
服务端日志 EMQX@5.4.0
2023-12-31T21:18:56.739535+00:00 [SOCKET] @123.14..:59524 msg: websocket_terminated, reason: {shutdown,#{expected => <<"'MQTT' or 'MQIsdp'">>,hint => invalid_proto_name,received => <<>>,shutdown_count => frame_error}} 2023-12-31T21:19:01.772411+00:00 [WS-MQTT] @123.14..:59526 msg: mqtt_packet_received, packet: {frame_error,#{expected => <<"'MQTT' or 'MQIsdp'">>, hint => invalid_proto_name,received => <<>>}}
**预期结果** mqtt正常建立连接 **实际结果** 连接断开,服务器无响应,日志反馈数据包损毁,日志如上 **系统信息:** - 发行平台: 微信小程序 - 操作系统: win11 22H2 x86-64 - HBuilderX版本 3.99 - uni-app版本 3.99.2023122514.4132 - 设备信息 x86-64 微信开发者工具1.06.2312061 RC **补充信息** **已知的解决方案** 1. 不要使用npm引入mqtt,直接下载mqtt.min.js引入,存入static文件夹 2. 其他步骤照旧 3. 编译运行 ** 正常情况下的请求结果**
Request: Request URL: wss://mqtt.xxx.xx/mqtt Request Method: GET Status Code: 101 Switching Protocols
Response: HTTP/1.1 101 Switching Protocols Server: nginx/1.18.0 (Ubuntu) Date: Sun, 31 Dec 2023 22:00:11 GMT Connection: upgrade sec-websocket-accept: **8w= sec-websocket-protocol: mqtt upgrade: websocket
Message: send: 00000000: 10 00000000: 27 00000000: 0004 00000000: 4d51 5454 00000000: 04 00000000: c2 00000000: 003c 00000000: 000f 00000000: 6d71 7474 6a73 5f61 3038 3734 6564 63 #id 00000000: 0004 00000000: 00000000: 0004 00000000: resive: 00000000: 2002 0000 保持连接与心跳
当通过npm引入mqtt中时,mqtt模块被压缩如common中。当通过static引入时,位于static文件夹下未被编译压缩。
感谢反馈,经过你的测试,发现 安装 mqtt 经过前端工具压缩之后表现不正常,通过额外的 mqtt.min.js 不参与工具链处理可以正确运行对吧?
mqtt
mqtt.min.js
我尝试复现下 mqtt 的问题,有进展我会更新此 issue
问题描述 在uni-app中,通过npm i mqtt@version 引入mqtt后。 在微信小程序端连接mqtt(wss)服务时,出现了与服务器通讯的异常(可以正常建立http连接,但无法收到任何返回数据)。 疑似压缩编译工具包导致了部分代码错误。 mqtt日志显示数据包损毁
复现步骤
建立新uni-app项目,选择vue2
npm install mqtt@3.0.0 (除了过高版本微信api不支持之外,其他版本均有此问题,如需手机端适配需要使用4.1.0)
尝试建立mqtt(wss / wxs)连接
编译运行至微信小程序
客户端发送数据
Response: HTTP/1.1 101 Switching Protocols Server: nginx/1.18.0 (Ubuntu) Date: Sun, 31 Dec 2023 21:44:23 GMT Connection: upgrade sec-websocket-accept: ***** sec-websocket-protocol: mqtt upgrade: websocket
message: send: 00000000: 10 00000000: 2700 0000 # 问题点:此处被补充满了八位,,正常情况下应当只发送27 00000000: 0004 00000000: 4d51 5454 00000000: 04 00000000: c2 00000000: 003c 00000000: 000f 00000000: 6d71 7474 6a73 5f33 6330 3237 3939 34 #id 00000000: 0004 00000000: 00000000: 0004 00000000: 连接断开,无任何响应数据
2023-12-31T21:18:56.739535+00:00 [SOCKET] @123.14..:59524 msg: websocket_terminated, reason: {shutdown,#{expected => <<"'MQTT' or 'MQIsdp'">>,hint => invalid_proto_name,received => <<>>,shutdown_count => frame_error}} 2023-12-31T21:19:01.772411+00:00 [WS-MQTT] @123.14..:59526 msg: mqtt_packet_received, packet: {frame_error,#{expected => <<"'MQTT' or 'MQIsdp'">>, hint => invalid_proto_name,received => <<>>}}
Request: Request URL: wss://mqtt.xxx.xx/mqtt Request Method: GET Status Code: 101 Switching Protocols
Response: HTTP/1.1 101 Switching Protocols Server: nginx/1.18.0 (Ubuntu) Date: Sun, 31 Dec 2023 22:00:11 GMT Connection: upgrade sec-websocket-accept: **8w= sec-websocket-protocol: mqtt upgrade: websocket
Message: send: 00000000: 10 00000000: 27 00000000: 0004 00000000: 4d51 5454 00000000: 04 00000000: c2 00000000: 003c 00000000: 000f 00000000: 6d71 7474 6a73 5f61 3038 3734 6564 63 #id 00000000: 0004 00000000: 00000000: 0004 00000000: resive: 00000000: 2002 0000 保持连接与心跳