【问题标题】:Send compressed JSON with MQTT.js使用 MQTT.js 发送压缩的 JSON
【发布时间】:2016-10-14 16:15:22
【问题描述】:

我正在尝试使用 MQTT 从浏览器将压缩的 JSON 发送到 python 服务器。 这就是我压缩原始对象的方式(通过使用 gzip-js)

...
if(opt.compression){
    msg = new Uint8Array(gzip.zip(msg, compressionOptions));
}
MQTTclient.publish(topic, msg);
...

但我得到了错误:

script.js:65 TypeError: string.charCodeAt 不是函数(…)

EventEmitter.emit@events.js:77

sendPacket@client.js:51

....

如果我尝试将消息发布为标准类型数组,也会发生同样的情况。 发送压缩消息的唯一方法是对其进行编码,但是我在 python 端遇到了问题。

【问题讨论】:

  • 您能解释一下为什么您不只是让浏览器和服务器为您执行 gzip 压缩/解压缩吗?浏览器的gzip远胜于任何可以用JS写的东西,而且已经加载到内存中了……
  • 您有什么理由使用 MQTT.js 而不是 paho JS 客户端?
  • @LinuxDisciple 这很可能不仅仅是浏览器和代理之间的负载,而是代理和订阅者之间的负载。 websocket协议升级后gzip编码也能正常工作吗?
  • @LinuxDisciple 我需要通过 mqtt 在客户端和服务器之间进行通信。我还没有看到如何使用您指出的内容来做到这一点。
  • @hardillb 有什么理由偏爱 paho 客户?它支持gzip压缩吗?我在文档中找不到与此相关的任何内容。是的,我需要将浏览器和 borker 广告之间的负载从代理压缩到其他订阅者(python 服务器)。

标签: javascript json gzip mqtt inflate


【解决方案1】:

我通过发布一个实际的“缓冲区”而不是一个类型化的数组来解决。 这是我的解决方法:

...
if(opt.compression){
    msg = toBuffer(gzip.zip(msg, compressionOptions));
}
MQTTclient.publish(topic, msg);
...

我使用了typedarray-to-buffer 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多