2016-10-14 2 views
0

Я пытаюсь отправить сжатый JSON с помощью MQTT из браузера на сервер python. Это как сжать исходный объект (с помощью GZIP-JS)Отправить сжатый JSON с MQTT.js

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

Но я получаю ошибку:

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

EventEmitter.emit @ events.js:77

sendPacket @ client.js:51

....

То же самое происходит, если я пытаюсь опубликовать сообщение в качестве стандартного машинописного массив. Единственный способ отправить сжатое сообщение - это его кодирование, но затем я получаю проблемы со стороны python.

+0

Не могли бы вы объяснить, почему вы не просто позволяете браузеру и серверу выполнять gzip compress/decprss для вас? Gzip браузера намного превосходит все, что может быть написано в JS, и оно уже загружено в память ... – LinuxDisciple

+0

По какой-либо причине вы используете MQTT.js, а не JA-клиент paho? – hardillb

+0

@LinuxDisciple Это скорее всего не только полезная нагрузка между браузером и брокером, но и между брокером и подписчиком. Также работает ли кодировка gzip после обновления протокола websocket? – hardillb

ответ

0

Я решил опубликовать фактический «буфер» вместо типизированного массива. Это мой обходной путь:

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

Я использовал typedarray-to-buffer модуль.

Смежные вопросы