我正在使用SailsJS作为Web应用程序,它基本上允许用户下载和处理来自互联网的任何视频(比如youtube)。用户输入视频链接,我的风帆应用程序下载视频(如果可用),然后使用shell脚本开始处理下载的视频(来OpenCV处理以查找不同的帧)。
此过程需要很长时间才能完成,用户可以离开页面并执行他想要的任何操作。现在,要通过稍后访问此页面来检查进度,我需要能够连接之前为此视频文件创建的子进程。
我提出了两种可能的解决方案:
1)每次用户导航到页面并开始获取回调事件并根据它们显示进度时,使用gearman实现作业服务器并连接到该服务器。这是我第一次使用gearman。
2)以某种方式将子进程的processID存储在session / db中,然后使用它来使用ps-node查找进程。
哪种方法更好(如果您认为它们能正常工作)?或者还有其他我不了解的解决方案吗?任何正确方向的指针都将受到赞赏。
答案 0 :(得分:0)
让我们从第二个选项开始。不要使用它。仅仅因为这样,您的网站用户就可以更好地控制服务器上运行的进程数量。
排名第一的方式更好,但使用单独的作业服务器对我来说似乎有些过分(我不得不承认,虽然我没有完全了解你的计划规模)。
最重要的是,我会使用消息/作业队列(kue似乎非常适合我)并将进度存储在DB或(最好)Redis(或您使用的任何缓存)中。