Javascript 如何使用sinatra websocket发送二进制数据?

Javascript 如何使用sinatra websocket发送二进制数据?,javascript,ruby,websocket,sinatra,Javascript,Ruby,Websocket,Sinatra,Sinatra websocket已经安装在我的Ubuntu系统上,可以使用文本字符串与浏览器中的JavaScript客户端进行通信 因为它适用于文本,所以我想从浏览器中的JavaScript客户端传输一些二进制数据,该客户端从画布获取图像数据,并使用WebSocket将其发送到Sinatra服务器。当服务器从客户机获取数据时,它只是将其发送回。 当服务器将接收到的内容发送回时,会发生错误。经过一夜的努力,我仍然不知道如何克服它 客户端JavaScript代码: var imgSocket =

Sinatra websocket已经安装在我的Ubuntu系统上,可以使用文本字符串与浏览器中的JavaScript客户端进行通信

因为它适用于文本,所以我想从浏览器中的JavaScript客户端传输一些二进制数据,该客户端从画布获取图像数据,并使用WebSocket将其发送到Sinatra服务器。当服务器从客户机获取数据时,它只是将其发送回。 当服务器将接收到的内容发送回时,会发生错误。经过一夜的努力,我仍然不知道如何克服它

客户端JavaScript代码:

 var imgSocket = new WebSocket("ws://" + window.location.host + "/img");

 var sendImageData = function(){
        var e = document.getElementById("canvas1");
        var c = e.getContext('2d');
        var img = c.getImageData(0,0,200,200);
        var binary = new Uint8Array(img.data.length);

        for (var i = 0; i < img.data.length; i++) {
           binary[i] = img.data[i];
        }

        imgSocket.send(binary.buffer);
 };
var-imgSocket=newwebsocket(“ws://“+window.location.host+”/img”);
var sendImageData=函数(){
var e=document.getElementById(“canvas1”);
var c=e.getContext('2d');
var img=c.getImageData(0,0200200);
var binary=新的Uint8Array(img.data.length);
对于(变量i=0;i
服务器端Ruby代码:

require 'sinatra'
require 'sinatra-websocket'

set :bind, "0.0.0.0"
set :img_sockets, []

get '/img' do
  if !request.websocket?
    "hello"
  else
    request.websocket do |ws|
      ws.onopen do
        puts "img_socket opened"
        settings.img_sockets << ws
      end

      ws.onmessage do |msg|
        EM.next_tick {settings.img_sockets.each {|s| s.send(msg)}} #error occurs here
        #EM.next_tick {settings.img_sockets.each {|s| s.send("message from server")}} #if I just send back a text message, it’s OK.
      end

      ws.onclose do
        puts "img_socket closed"
        settings.img_sockets.delete(ws)
      end
    end
  end
end
需要“sinatra”
需要“sinatra websocket”
设置:绑定“0.0.0.0”
设置:img_插座,[]
获取“/img”do
如果!请求websocket?
“你好”
其他的
request.websocket do | ws|
ws.onopen do
将“img_插座打开”

settings.img_套接字似乎已在此处提交此问题:
Stopping ...
/home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/eventmachine-1.0.3/lib/em/connection.rb:266:in `close_connection': eventmachine not initialized: evma_close_connection (RuntimeError)
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/eventmachine-1.0.3/lib/em/connection.rb:266:in `close_connection'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/backends/base.rb:95:in `block in stop!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/backends/base.rb:95:in `each_value'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/backends/base.rb:95:in `stop!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/server.rb:190:in `stop!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/sinatra-1.4.4/lib/sinatra/base.rb:1406:in `quit!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/sinatra-1.4.4/lib/sinatra/base.rb:1431:in `ensure in run!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/sinatra-1.4.4/lib/sinatra/base.rb:1431:in `run!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/sinatra-1.4.4/lib/sinatra/main.rb:25:in `block in <module:Sinatra>'
Stopping ...
/home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/eventmachine-1.0.3/lib/em/connection.rb:266:in `close_connection': eventmachine not initialized: evma_close_connection (RuntimeError)
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/eventmachine-1.0.3/lib/em/connection.rb:266:in `close_connection'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/backends/base.rb:95:in `block in stop!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/backends/base.rb:95:in `each_value'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/backends/base.rb:95:in `stop!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/thin-1.6.1/lib/thin/server.rb:190:in `stop!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/sinatra-1.4.4/lib/sinatra/base.rb:1406:in `quit!'
    from /home/uncutstone/.rvm/gems/ruby-2.0.0-p353/gems/sinatra-1.4.4/lib/sinatra/base.rb:1505:in `block in setup_traps'