Cowboy'dan WebSocket üzerinden bir tarayıcıya MessagePack ile kodlanmış bir ileti göndermeye çalışıyorum ve alınan veri her zaman boş veya geçersizdir. JS'den kovboy işleyicime ikili veri gönderebiliyorum, ancak tam tersi değil. Resmi msgpack-erlang
uygulamasıyla Cowboy 1.0.4 kullanıyorum. Ayrıca tarayıcıdaki javascript için msgpack-lite
kullanıyorum.Kovboy ve MessagePack ile web üzerinden ikili veri gönderme MessagePack
Örnekler:
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);
};
Tarayıcı msgpack.min.js iç hata verir:
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...
Ben denerseniz çıkış ra konsol için w event.data, işte şunu alıyorum:
ArrayBuffer {}
Bazı nedenlerle boş görünüyor. Hem erlang
hem de msgpack
için yeniyim ve neyin yanlış gittiğini bilmiyorum. Yardım ettiğin için teşekkür ederim!
Teşekkür ama yardımcı olmuyor. Sanırım ana sebep boş ArrayBuffer değeri. Yapılandırmayla ilgili bir sorun var, ama ne olduğunu bilmiyorum :( –
@ConstantineEmeraldMaster: WebSocket iletişimini beklediğiniz gibi denediniz mi ve doğruladınız mı? JS tarafında hiçbir şey alamadığınızdan şüpheleniyorum. –
İletişim, metin modunu kullanarak her iki yönde de çalışır, ikili modda 1 yönde (istemciden sunucuya) çalışır. JS istemcisi, sunucudan ikili iletileri alamıyor –