在超时前在 websocket 中发送大文件
Sending large file in websocket before timeout
我正在使用 Faye 和 EventMachine 打开到另一台服务器的套接字。如果服务器未检测到 activity,则服务器超时。如何发送文件(二进制编码)以使服务器不会超时?
这是我的资料:
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
}
你需要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,有类似的操作原理
这与 How to send binary file over Web Sockets with Rails 有点重复,虽然这个问题确实排在第一位...
请参阅我对该问题的回答,了解在您发送文件时不会阻止您申请的另一个选项。
我正在使用 Faye 和 EventMachine 打开到另一台服务器的套接字。如果服务器未检测到 activity,则服务器超时。如何发送文件(二进制编码)以使服务器不会超时?
这是我的资料:
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
}
你需要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,有类似的操作原理
这与 How to send binary file over Web Sockets with Rails 有点重复,虽然这个问题确实排在第一位...
请参阅我对该问题的回答,了解在您发送文件时不会阻止您申请的另一个选项。