Sending large file in websocket before timeout

2019-08-27 07:12发布

I'm using Faye and EventMachine to open a socket to another server. The server times out if it doesn't detect activity. How do I send the file (binary encoded) so the server doesn't time out?

Here's what I have:

media_path = "/path/to/media/file"

EM.run {
  ws = Faye::WebSocket::Client.new(uri)

  ws.on :open do |event|
    puts "Opening socket"
    ws.send(File.read(media_path))
  end

  ws.on :message do |event|
    puts "Recieving message"
  end

  ws.on :close do |event|
    ws = nil
    EM.stop
  end
}

2条回答
相关推荐>>
2楼-- · 2019-08-27 07:39

This is slightly of a duplicate for How to send binary file over Web Sockets with Rails Although this question did come first...

Please see my answer to that question for another option that won't block your application while you send your file.

查看更多
别忘想泡老子
3楼-- · 2019-08-27 07:47

You need to send your file in batches. Something like that:

ws.on :open do |event|
  puts "Opening socket"
  File.open('filename','r') do |f|
    ws.send(f.gets)
  end
end

You solve another problem this way: you wouldn't place your whole file in RAM + you'll send it faster. You can read about nodejs streams, there is a similar principle of operation.

查看更多
登录 后发表回答