Я отправляю данные json на сервер websocketpp с пакетом сообщений, используя kawanet / msgpack-lite (javascript) на клиенте и msgpack / msgpack-c (C ++), чтобы распаковать их, и nlohmann / json, чтобы проанализировать их на сервере. Это идет хорошо.
Но я, очевидно, неправильно использую пакет сообщений, так как не могу правильно проанализировать возвращаемые данные.
Сервер:
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
При отправке JSON в виде строки в set_payload ()
msg->set_payload(jdata.dump());
хорошо передается
FileReader.onload(): {"cnt":4,"data":"test","type":"msg"}
Адрес std::stringstream
не является указателем на его основной буфер.
Пытаться: msg->set_payload(buffer.str());
,
Если это помогает: nlohmann / json теперь поддерживает MessagePack (и CBOR), так что теперь вы можете полностью реализовать свой сценарий без nlohmann / json. Увидеть https://github.com/nlohmann/json#binary-formats-cbor-and-messagepack Например.