为了不阻塞反应器,我想异步读取文件,但我发现使用EventMachine没有明显的方法。我尝试过几种不同的方法,但没有一种感觉正确:
EM.popen('cat some/file', FileReader)
感觉非常奇怪,但比上面的替代品效果更好。结合LineAndTextProtocol
,它可以很快地读取线条。EM.attach
,但我没有找到任何关于如何使用它的例子,我在邮件列表上发现的唯一一件事就是它被弃用了... ... EM.watch
,我没有找到如何用于阅读文件的示例。如何读取EventMachine反应器循环中的文件?
答案 0 :(得分:6)
EM.attach / watch不能用于文件,因为基于磁盘的文件描述符上的select / epoll总是会返回可读的。
最终,这取决于你想要做什么。如果它是一个小文件,只需File.read它。如果它更大,你可以随着时间的推移阅读小块。例如,EM :: FileStreamer通过网络发送大文件。
另一个常见的用例是在文件发生变化时拖尾文件并读入新内容。这可以使用EM.watch_file:http://github.com/jordansissel/eventmachine-tail
来实现