2016-10-14 3 views
0

Ich versuche, eine komprimierte JSON zu senden. Diese ist, wie ich das ursprüngliche Objekt komprimieren (von gzip-js verwenden)komprimierte JSON senden mit MQTT.js

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

Aber ich bekomme die Fehlermeldung:

script.js:65 TypeError: string.charCodeAt is not a function(…)

EventEmitter.emit @ events.js:77

sendPacket @ client.js:51

....

Das gleiche passiert, wenn ich versuchen, die Nachricht als Standard getippt zu veröffentlichen Array. Die einzige Möglichkeit, die komprimierte Nachricht zu senden, ist durch Kodierung, aber dann bekomme ich Probleme auf der Python-Seite.

+0

Könnten Sie erklären, warum Sie nicht nur den Browser und dem Server zu lassen tun, um die gzip komprimieren/decomprss für Sie? Das gzip des Browsers ist allem, was in JS geschrieben werden könnte, weit überlegen, und es ist bereits im Speicher geladen ... – LinuxDisciple

+0

Gibt es irgendeinen Grund, warum Sie MQTT.js anstelle des Paho JS-Clients verwenden? – hardillb

+0

@LinuxDisciple Hierbei handelt es sich höchstwahrscheinlich nicht nur um die Nutzlast zwischen dem Browser und dem Broker, sondern auch zwischen dem Broker und dem Abonnenten. Funktioniert die gzip-Codierung auch nach dem Websocket-Protokoll-Upgrade? – hardillb

Antwort

0

I gelöst durch ein tatsächliches „Puffer“ anstelle eines typisierten Array zu veröffentlichen. Das ist mein Problem zu umgehen:

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

Ich benutzte das typedarray-to-buffer Modul.

Verwandte Themen