私は、WebSocketを介してカウボーイからブラウザにMessagePackエンコードされたメッセージを送信しようとしていますが、受信データは常に空または無効です。 JSから私のカウボーイハンドラにバイナリデータを送ることはできますが、その逆はできません。 私は公式msgpack-erlang
アプリケーションでカウボーイ1.0.4を使用しています。私もmsgpack-lite
をブラウザ内のJavaScriptに使用しています。カウボーイとMessagePackでwebsocket経由でバイナリデータを送信
例:
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...
私がしようとした場合出力ra w event.dataをコンソールに送信すると、次のようになります。
ArrayBuffer {}
何らかの理由で空になっているようです。私はerlang
とmsgpack
の両方に新しいです、そして何がうまくいかないのか分かりません。ご協力いただきありがとうございます!
おかげで、それは役立ちません。私は主な理由は空のArrayBufferの値だと思う。設定が間違っていますが、何がわかりません:( –
@ ConstantineEmeraldMaster:WebSocket通信が正常に動作することを試しましたか?JS側で何も取得できないと思われます。 –
テキストモードを使用する双方向通信は、バイナリモードで1方向(クライアントからサーバへ)でも動作します。JSクライアントはサーバからバイナリメッセージを受信できません。 –