欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

javascript - php异步视频处理问题?求大神指导

程序员文章站 2022-05-06 09:09:24
...
需求描述:
使用百度云平台的视频解决方案,它的解决方案是手机端先上传至自有服务器,再由自有服务器上传至百度的服务器,现在希望php后台在完成用户上传至自有服务器时,返回用户上传成功,然后执行上传至百度服务器的操作。 现在遇到的问题是:PHP后端是等待所有的执行完成后,才会对客户端进行返回。搞得每一次都会等很久。

不知道各位大神可以指导一下小子吗?做前端的,php初级,遇到很多的问题,谢谢各位大神们。

回复内容:

需求描述:
使用百度云平台的视频解决方案,它的解决方案是手机端先上传至自有服务器,再由自有服务器上传至百度的服务器,现在希望php后台在完成用户上传至自有服务器时,返回用户上传成功,然后执行上传至百度服务器的操作。 现在遇到的问题是:PHP后端是等待所有的执行完成后,才会对客户端进行返回。搞得每一次都会等很久。

不知道各位大神可以指导一下小子吗?做前端的,php初级,遇到很多的问题,谢谢各位大神们。

如果你的PHP服务用的是PHP-FPM,可以专门开一个用于处理视频上传操作的进程池pool,脚本用fastcgi_finish_request快速响应用户完成请求后,执行耗时的上传处理.

在文件上传过程中PHP-FPM并不会被阻塞,因为Nginx接收完上传的内容后才一次性交给PHP-FPM.
"从自有服务器上传至百度服务器"这个操作则会阻塞占用一个PHP-FPM工作进程.
这时可以考虑建立的upload进程池来处理这个操作,避免阻塞系统的其他脚本运行.

nginx.conf: upload.php脚本的处理都交给监听9001的PHP-FPM进程池处理
location = /upload.php {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

php-fpm: 正常的脚本由静态www池处理,网络阻塞脚本由动态upload池处理
[www]
listen = 127.0.0.1:9000
pm = static
pm.max_children = 4
[upload]
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 8
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 4

可以使用队列,用户传完之后直接压一个任务到队列里然后返回上传完成,系统再执行个定时任务去跑这个队列。队列应用形式有好几种,你搜搜看