Отправка большого файла в веб-сокет до истечения времени ожидания

Я использую 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, хотя этот вопрос был первым...

Пожалуйста, смотрите мой ответ на этот вопрос для другого варианта, который не будет блокировать ваше приложение, пока вы отправляете файл.

Другие вопросы по тегам