2016-10-14 90 views
0

我想使用MQTT從瀏覽器發送壓縮的JSON到python服務器。 這是我如何壓縮原始對象(通過使用gzip-JS)使用MQTT.js發送壓縮的JSON

... 
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/decomprss嗎?瀏覽器的gzip遠遠優於任何可以用JS編寫的東西,並且它已經加載到內存中了...... – LinuxDisciple

+0

你使用MQTT.js而不是paho JS客戶端的任何原因? – hardillb

+0

@LinuxDisciple這很可能不僅僅是瀏覽器和代理之間的有效載荷,而是代理和訂戶之間的有效載荷。在websocket協議升級之後,gzip編碼還能工作嗎? – hardillb

回答

0

我通過發佈一個實際的「緩衝區」而不是一個類型化的數組來解決。 這是我的解決方法:

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

我用typedarray-to-buffer模塊。