2013-01-15 43 views
1

我試着去理解並實現MQTT客戶端使用Node.js語言,它可以在這裏找到:http://jahbromo.blogspot.de/2011/12/client-mqttt-javascript.htmlMQTT客戶端的node.js playloads大於128個字節

當我發佈playloads低於128個字節沒有問題和消息的定向正確,但是當有效負載較大時,node.js在發佈後立即打印出「由代理關閉的連接」。因爲我對websockets和node.js比較陌生,我不明白爲什麼上面提到的這個node.js-server-implemenatation不能處理大於128字節的playload。 因爲我需要發送更大的有效載荷,如果有人能夠幫助我增加限制,那將是非常好的。

謝謝。

+0

我一直在努力的MQTT客戶機/服務器庫一會兒現在,它支持yilun不支持的一些東西,比如qos和長信息。可在https://github.com/adamvr/MQTT.js希望這有助於! – adamvr

回答

2

你會在你鏈接到代碼的限制通知下來(這實際上是https://github.com/yilun/node_mqtt_client修改後的版本):

無法處理的有效載荷大於128字節大。

這是客戶端庫的限制,而不是MQTT的限制。

要添加更大的有效載荷的支持,你需要實現發佈數據包完整的「剩餘長度」的支持,在規範中描述:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#fixed-header

+0

感謝您的快速回答。所以這意味着我必須將「修復頭」的代碼從199行更改爲208,對吧? 'buffer [i ++] = MQTTPUBLISH; buffer [i ++] = payload.length + var_header.length;對於(n = 0; n user1970295

+0

是的。您需要提前計算「剩餘長度」需要多少字節,並將其添加到緩衝區的大小。 – ralight

+0

好的,但我認爲這已經由第197行完成了:'var buffer = new Buffer(2 + var_header.length + payload.length);'其中緩衝區由var_header的長度和有效載荷的長度。 – user1970295