Javascript 大型视频上传和处理超时

Javascript 大型视频上传和处理超时,javascript,ruby-on-rails,ajax,node.js,Javascript,Ruby On Rails,Ajax,Node.js,我正在开发一个rails应用程序,用户可以上传一些视频。Apache和passenger是我的服务器。视频大小可以达到500MB或1GB。视频上传后会转换为mp4并播放 我正在使用上传文件。有了这个,我可以轻松上传一个500MB的视频文件。我想在上传完成后立即显示视频的mp4预览。我正在使用ffmpeg处理将视频转换为mp4。此转换有时可能需要10分钟以上的时间,而由于默认的apache超时,我的请求在5分钟后超时 因此,这里的问题是ajax上传只会在上传完成后5分钟内保持请求的活动状态。我需要

我正在开发一个rails应用程序,用户可以上传一些视频。Apache和passenger是我的服务器。视频大小可以达到500MB或1GB。视频上传后会转换为mp4并播放

我正在使用上传文件。有了这个,我可以轻松上传一个500MB的视频文件。我想在上传完成后立即显示视频的mp4预览。我正在使用ffmpeg处理将视频转换为mp4。此转换有时可能需要10分钟以上的时间,而由于默认的apache超时,我的请求在5分钟后超时


因此,这里的问题是ajax上传只会在上传完成后5分钟内保持请求的活动状态。我需要在文件上传完成后保持活动状态10-20分钟的请求。如果有任何其他基于javascipt的解决方案可用于保持此请求的活动性,直到视频处理完成并向用户显示预览,那将是非常棒的

这听起来像一个Apache配置指令(KeepAliveTimeout和TimeOut)

KeepAliveTimeout 1200#60秒*20分钟

有关Apache的更多信息和语法,请参见:


另一种选择:能否修改JS/AJAX以每2分钟重新请求一次,并检查预览是否存在?

在视频转码之前保留阻止请求可能会给服务器带来负担。大多数服务器可以同时处理40-80个并发请求,具体取决于Rails堆栈的内存占用、安装的gems和Apache服务器设置。如果您允许10分钟的请求,这意味着同时上载的40个用户可以关闭您的服务

我的建议是使用Ajax每隔几秒钟轮询一次Rails服务器,前提是转码完成。如果有,您可以刷新页面或添加更多javascript来初始化视频播放

window.setInterval( function() {
  $.get('video_path').done(function(data, code, xhr) {
    location.reload(); // or some code for playing back the video
  });
}, 2000);
另一个类似的解决方案可以使用类似或的第三方服务,允许浏览器保持持久连接,然后允许Rails服务器在触发事件后通知客户端。像这样的推送服务通常用于更好的异步处理和并发维护许多打开的连接

第三种选择是切换到Apache并使用Rails。Puma更适合处理并发性。

两个tomcat参数(注意!仅在tomcat 7.0之后可用)允许您在运行请求时保持会话活动。此外,只有在请求完成后,会话超时才会再次开始计数:

org.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true
org.apache.catalina.session.StandardSession.LAST_ACCESS_AT_START=false
您可以在server.xml中设置这两个选项,也可以通过JAVA_选项传递它们:

-XX:MaxPermSize=252m -Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true -Dorg.apache.catalina.session.StandardSession.LAST_ACCESS_AT_START=false

嗨,谢谢你的回答。但是,我认为这个配置设置将允许请求阻塞服务器更长的时间,这可能会在有大量并发用户时导致问题,正如Alon Burg在下面的帖子中提到的那样。所以,我有点犹豫不决尝试这个。谢谢这一点。你好,阿隆,谢谢你的指点。我更愿意尝试第一种或第二种选择。在我的例子中,fileupload请求的响应应该显示视频播放。因此,我需要将上传请求保持活动状态,直到结束。目前,valums文件上传程序在文件上传完成后不会进行轮询。我将尝试一些代码,然后继续讨论。嗨,关于Puma和Rails流式API的信息也很有趣。我不知道这件事。谢谢