Отправка большого файла в веб-сокет до истечения времени ожидания
Я использую 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 ответа
Решение
Вам необходимо отправить файл в пакетном режиме. Что-то вроде того:
ws.on :open do |event|
puts "Opening socket"
File.open('filename','r') do |f|
ws.send(f.gets)
end
end
Таким образом вы решаете еще одну проблему: вы не поместите весь файл в оперативную память + вы отправите его быстрее. Вы можете прочитать о потоках nodejs, есть аналогичный принцип работы.
Это немного похоже на то, как отправить двоичный файл через Web-сокеты с Rails, хотя этот вопрос был первым...
Пожалуйста, смотрите мой ответ на этот вопрос для другого варианта, который не будет блокировать ваше приложение, пока вы отправляете файл.