我正在为我的申请寻找最好的方法。我有视频上传功能。前端将发送upload/video
请求并附上视频文件,然后我的后端将处理该请求,将减小视频的大小和质量(使用fluent-FFMPEG
),然后将基于视频的第一帧创建缩略图图像,然后将视频和他的缩略图图像上传到AWS S3 bucket,最后将压缩的视频和缩略图返回到前端。我遇到的问题是,所有压缩、创建缩略图和上传的(后端)任务都非常耗时,有时(取决于视频大小和持续时间)我的nginx
服务器会返回504网关超时,这是正常的。问题是:
如何处理这个案子。我是否应该使用web套接字通知前端进行视频处理,或者我不需要等到所有这些操作完成。我的目标是有一个功能,在那里我可以上传一个视频,显示一些视频处理的进度条,用户可以“播放”应用程序,而不需要等待直到视频处理成功
看来这是个建筑问题。这里有一个我比较喜欢的解决方案。
>
使用队列并将进度存储在某个键值DB中。您可能对队列不熟悉,所以我建议您查看一些与队列相关的教程。当您使用amazon时,sqs可能会对您感兴趣。在Rails中,您可以检查SideKiq。拉拉维尔有拉拉维尔地平线。
而每个队列都是progress design app,因此它可以报告它。比如50%、60%等。
进程缩略图等在队列上也。
如果您想缩放,您可以简单地增加队列的数量。我想其他人也是这样处理的。