MessagePackをWebSocketに乗せてバイナリとテキストを混ぜて送る
サーバーサイドをrubyのfaye-websocketで作ってたんですが、画像データとその他を一緒に送りたいと思ったんですが、受け取ったdataをそのまま送ると、文字列の配列として送信されてしまった。
まずWebSocketにMessagePackを乗せるためには
普通に
client.send data.to_msgpack
って書くとtextで配られてしまってうまく行かなかった
client.send data.to_msgpack.bytes
って書くとちゃんとバイナリとして送れる
そしてWebSocketで送られてきたバイナリ(画像データ)をテキストと混ぜて送る
ちゃんとpackしてしまえばいい
ws = Faye::WebSocket.new(env, nil, ping: KEEPALIVE_TIME)
ws.on :open do |event|
~~略~~
end
ws.on :message do |event|
data = {data: event.data.pack('C*'), by: client.object_id, from: env['REQUEST_PATH']}.to_msgpack.bytes
clients.each do |client|
client.send data
end
end