创建服务器处理队列

时间:2011-04-26 21:05:15

标签: web-applications

我甚至不太确定如何提出这个问题,因为这是一个整体概念问题,但我想我会尝试一下。

我正在尝试创建一个概念上类似于许多视频托管网站的流程,例如Vimeo。使用Vimeo作为示例,用户将视频上传到主服务器,视频被添加到处理队列,并且用户可以在视频处理时自由地做其他事情。稍后,用户会收到一封电子邮件,说明处理已完成,现在可以访问视频,用户可以随意使用。

我的问题是,这样的系统如何运作?我的经验主要是使用PHP,其中所有处理都直接与该页面中的代码(或通过包含)相关联。当用户离开页面时,你如何处理这样的处理?

这是我的猜测......请指正。用户提交的页面通过某种API Hook将其文件添加到处理软件队列中。可能用其他语言编写的处理器,如C或Java或其他任何东西,都可以完成它的工作,然后当它完成时,它会激活对某个PHP页面的调用,然后向用户发送一封电子邮件,并做任何需要做的事情。该视频。

我想我只是想了解一些大型网站的“黑匣子”是如何运作的,至少在概念上如此。有人可以帮我从这里出去吗?对不起,这是一个如此大的模糊问题。

1 个答案:

答案 0 :(得分:0)

您的问题的一个解决方案是启动一个处理视频处理和邮寄用户的新流程分支,然后主流程像往常一样继续。这将阻止主进程停止并强制用户等待处理完成。

您可以在此处阅读有关在PHP中创建流程分支的信息:http://php.net/manual/en/book.pcntl.php

然后有一些应用程序可以处理视频处理,例如ffmpeg:http://www.ffmpeg.org/

您只需使用exec函数执行cli应用程序(如ffmpeg),而不必使用新的编程语言:http://php.net/manual/en/function.exec.php

您需要找出一种方法来对进程进行排队,以便服务器不会过载。可能需要一些功能来检查数据库中的活动进程,并等待表的活动进程少于允许的进程。