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
}
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.