Что лучший способ состоит в том, чтобы считать файлы в находящемся в EventMachine приложении?

Для не блокирования реактора, я хотел бы считать файлы асинхронно, но я не нашел очевидного способа сделать его использование EventMachine. Я попробовал несколько разных подходов, но ни один из них не чувствует себя хорошо:

  • Просто считайте файл, он заблокирует реактор, но что, черт возьми, дело не в этом медленный (если это не большой файл и затем это определенно).
  • Откройте файл для чтения и считайте блок на каждой галочке (но сколько читать? слишком много и это заблокирует реактор, слишком мало и чтение станет медленнее, чем необходимый).
  • EM.popen('cat some/file', FileReader) чувствует себя действительно странным, но работает лучше, чем альтернативы выше. В сочетании с LineAndTextProtocol это читает строки довольно быстро.
  • EM.attach, но я не нашел примеров того, как использовать его, и единственная вещь, которую я нашел в списке рассылки, состоит в том, что это удерживается от использования в пользу …
  • EM.watch, который я не нашел примерами того, как использовать для чтения файлов.

Как Вы читаете файлы в цикле реактора EventMachine?

12
задан Theo 1 May 2010 в 09:59
поделиться

1 ответ

EM.attach / watch не может использоваться для файлов, так как select / epoll для файлового дескриптора на диске всегда будет возвращать данные для чтения.

В конечном счете, это зависит от того, что вы пытаетесь сделать. Если это небольшой файл, просто прочтите его. Если он больше, вы можете читать небольшие фрагменты с течением времени. Например, EM :: FileStreamer делает это для отправки большого файла по сети.

Другим распространенным вариантом использования является отслеживание файла и чтение нового содержимого при его изменении. Этого можно добиться с помощью EM.watch_file: http://github.com/jordansissel/eventmachine-tail

6
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: