我编写了一个用于查看大型日志文件的Web应用程序。每个日志文件可以超过500MB,每个文件包含100K行或更少。我已经使用supervisord来管理启动龙卷风和nginx的8个实例,以将请求重定向到8个龙卷风实例中的每一个。部署后,我注意到请求被锁定并且内存使用量很大。
我当前的实现只是逐个读取文件中的每一行并通过websocket发送。我选择通过websocket进行通信,因为它允许我向用户显示进度。当只有一个或两个用户时,这种方法很有效,但是一旦用户开始提交加载文件的请求,服务器就会陷入困境。
我希望有人可以告诉我最好的方法是将大文件发送到客户端,以便在他们的网络浏览器中查看,而不会阻止未来的请求。可以有30-50个用户同时加载日志文件。我已经阅读了this解决方案,它似乎是我需要的,但我不知道这是否是最好的解决方案。
答案 0 :(得分:0)
提到Generate large file and send it恕我直言是最好的(也许是唯一没有进入内部的非阻塞)方式来发送大数据。
另一方面,通过运行单独的进程cat
并使用PipeIOStream,读取文件可能以完全非阻塞的方式实现,它是一个古玩。当然,以这种方式阅读并不是最好的解决方案,但在实施tail -f时它会变得很方便。
不同方法
但我个人会使用nginx来完成这项任务,因为你想要提供大文件而且全部都是(没有尾部-f)。可以在js中实施进展。有用的资源: