Я пытаюсь отправить закодированное в MessagePack сообщение от Cowboy в браузер через WebSocket, и полученные данные всегда пусты или недействительны. Я могу отправлять двоичные данные из JS в мой обработчик ковбоев, но не наоборот. Я использую Cowboy 1.0.4 с официальным приложением msgpack-erlang
. Я также использую msgpack-lite
для моего javascript в браузере.
Примеры:
websocket_handler
:
websocket_handle({text, <<"return encoded">>}, Req, State) ->
%% sends encoded message to client. Client is unable to decode and fails
{reply, {binary, msgpack:pack(<<"message">>)}, Req, State};
websocket_handle({binary, Encoded}, Req, State) ->
%% Works as expected
lager:info("Received encoded message: ~p", [msgpack:unpack(Encoded)]),
{ok, Req, State};
JS:
var host = "ws://" + window.location.host + "/websocket";
window.socket = new WebSocket(host);
socket.binaryType = 'arraybuffer';
socket.onmessage = function(event) {
var message = msgpack.decode(event.data);
console.log(message);
};
Браузер возвращает ошибку внутри msgpack.min.js:
Error: Invalid type: undefined
...ion n(t){var r=i(t),e=f[r];if(!e)throw new Error("Invalid type: "+(r?"0x"+r.toSt...
Если я попытаюсь вывести необработанные данные event.data на консоль, вот что я получаю:
ArrayBuffer {}
Оно почему-то кажется пустым. Я новичок в erlang
и msgpack
и не знаю, что происходит. Спасибо за вашу помощь!