我正在使用客户端上的kawanet / msgpack-lite(javascript)和msgpack / msgpack-c(C ++)将json数据发送到带有messagepack的websocketpp服务器以解压缩它,并将nlohmann / json解析为在服务器上解析它。这很好。
但是我显然是以错误的方式使用messagepack,因为我无法正确解析返回的数据。
服务器:
if (jdata["type"] == "msg") {
std::stringstream buffer;
std::string clientmsg = jdata["data"];
jdata["cnt"] = clientmsg.length();
msgpack::pack(buffer, jdata.dump());
size_t plen = buffer.tellp();
msg->set_payload(&buffer, plen);
m_server.send(hdl, msg);
}
客户端:
reader.onload = function (e) {
console.log("FileReader.onload(): " + reader.result);
var decoded_message = msgpack.decode(reader.result);
}
reader.readAsText(e.data);
使用
在msgpack.decode()上失败Uncaught Error: Invalid type: 0xh
在set_payload()
中发送json作为字符串时msg->set_payload(jdata.dump());
传输正常
FileReader.onload(): {"cnt":4,"data":"test","type":"msg"}
答案 0 :(得分:0)
std::stringstream
的地址不是指向其底层缓冲区的指针。
尝试:msg->set_payload(buffer.str());
。
答案 1 :(得分:0)
如果有帮助:nlohmann / json现在支持MessagePack(和CBOR),所以你现在可以完全用nlohmann / json实现你的场景。有关示例,请参阅https://github.com/nlohmann/json#binary-formats-cbor-and-messagepack。