在超时之前在websocket中发送大文件

时间:2015-10-06 17:31:31

标签: ruby faye em-websocket

我正在使用Faye和EventMachine打开另一台服务器的套接字。如果服务器未检测到活动,则服务器将超时。如何发送文件(二进制编码),以便服务器不会超时?

这就是我所拥有的:

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 个答案:

答案 0 :(得分:1)

您需要send your file in batches。这样的事情:

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

您通过这种方式解决了另一个问题:您不会将整个文件放在RAM +中,而是会更快地发送它。你可以阅读nodejs streams,有一个类似的操作原则。

答案 1 :(得分:1)

How to send binary file over Web Sockets with Rails来说,这有点重复虽然这个问题确实是第一次......

请查看我对该问题的回答,以获取在发送文件时不会阻止您的申请的其他选项。