javascript - 上传剖析

标签 javascript ruby-on-rails

我想知道上传中等大文件的普遍共识是什么。我有一个网络应用程序,每次用户上传文件(通常大于 5mb)时,网络服务器往往会挂起,直到文件上传完成。

以上看起来很正常,因为单个上传可以占用单个 HTTP 请求处理程序。网络开发人员是否考虑了这一点,并且:

a) 支付更多的 HTTP 处理程序

b) 使用其他方法通过使用 AJAX 或其他方法来克服此问题

我听说网络应用程序有一些 HTTP 请求处理程序来处理这个是很正常的,这会花费更多。另一方面,如果成本是一个问题,那么有人建议尝试通过 Flash + AJAX 直接上传到 Web 服务器或存储服务(即 Amazon S3)。后一种方法需要编写一些脚本并且有点困惑。

我的第二个问题:

通过使用 ajax 将文件上传到服务器。这是否仍然占用整个 HTTP 请求处理程序?即服务器会挂起直到上传完成吗?

即使使用 Flash,我仍然需要指定一个要上传到的 URL。该 url 将是我的 Controller 上的操作之一。这意味着处理仍然发生在服务器端。到目前为止这是对的吗?

我在想。另一方面,如果我使用其中一个上传脚本(plupload、uploadify、swfupload 等)直接上传到 Amazon S3,那么处理将在 S3 服务器上进行,而不是在本地 Web 服务器上进行。这根本不会挂起网络应用程序。我的理解正确吗?

想听听您的反馈。

最佳答案

对于大型上传,您应该使用非阻塞的事件服务器,如 Node.js、Twisted on Pyhon、 Perl 上的 AnyEvent 或 Ruby 上的 EventMachine。对于长时间运行的连接,使用每个连接线程模型的成本太高。

对于 Node.js 用户而言,同时连接如此之多以致于他们实际上达到了操作系统限制但仍未使用所有资源的情况并不少见 - 例如,请参阅 this question有人问,他担心只有 3 万 同时连接,然后设法在具有 4GB RAM 的单个服务器上达到 6 万 连接。

重点是,如果您担心您的连接会阻止您的服务器为新请求提供服务,那么您一开始就不应该使用阻止服务器。

关于javascript - 上传剖析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5101305/

相关文章:

ruby-on-rails - Ruby on Rails before_save 在创建新记录后直接导致更新

ruby-on-rails - Rails - 如何在 View 中插入/渲染文件

mysql - 文档管理的数据库设计?

ruby-on-rails - 添加字体后,Heroku Rails Assets 管道无法预编译

ruby-on-rails - rails : how do I use javascript conditional on controller/action

javascript - Knockout 如何使用元素获取数据绑定(bind)键和可观察值?

javascript - 为什么此示例 ASP.NET + Jquery + javascript 自定义 MVC 不显示任何内容?

Javascript - 将日期转换为更易于阅读的内容(月份名称)

javascript - 使用 % 通过单按钮 JavaScript 函数交换图像

javascript - 如何在当前现有的 javascript 对象中添加嵌套对象