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