【问题标题】:Concurrent photo and note uploading并发照片和笔记上传
【发布时间】:2013-09-25 02:17:00
【问题描述】:

我有这样的要求,即用户从手机上传照片,并在照片中输入注释

但是,为了大大提高响应速度,我想在用户完成输入注释之前开始上传照片(与 instagram 使用相同的技术)

因此,有 3 种情况: - 照片上传完成,然后提交笔记 - 提交笔记,然后照片完成上传 - 笔记和照片同时完成上传

我现在使用一个唯一的令牌,以及 after_create 挂钩来检查和保存。

  • 照片上传和便笺都附带一个独特的 uuid

  • 使用唯一 ID 将照片存储在临时存储中

    • 照片保存后(after_create),检查是否有带有uniqueid的笔记。如果有,请附上照片以作备注。
  • 使用唯一标识存储笔记

    • 当笔记被保存(after_create)时,检查是否有任何带有uniqueid的照片。如果是这样,请在照片上附上备注

这似乎是一个相当普遍的问题,我想知道是否有任何可接受的模式/解决方案?我正在使用 mongoid 和 rails 3.2

【问题讨论】:

  • 我认为您必须将表示层与应用层区分开来。考虑到网络应用程序,instagram 也是一个非常糟糕的例子,因为它是原生的,并且可以轻松地做你不能做的事情(完全或付出很大的努力)。在本机应用程序案例中,安全问题也较少,因为用户无法编辑发送到服务器的参数(您的示例显然就是这种情况)。在我的一个应用程序中,我只是锁定提交按钮,直到照片上传完成。这是一个非常简单的解决方案。

标签: ruby-on-rails mongodb concurrency ruby-on-rails-3.2 mongoid


【解决方案1】:

为了避免并发问题和 UI 混乱。在你的情况下,我会做的是:

  • 用户选择照片 -> 在 JS(客户端)中设置局部变量 -> 服务器开始上传照片 (当服务器从照片上传响应时,取消设置本地 js var)
  • 用户写笔记
  • 用户提交表单->你检查js变量是否设置,如果是,意味着照片还没有上传,所以你显示一条消息。否则,您只需提交带有注释的表单即可。

如果您将流程简化为类似的东西,您就不应该有太多的边缘情况需要调试和修复。

这里唯一的潜在风险是“死锁”情况,可以说由于某种原因服务器永远不会向客户端发送响应,而客户端永远不会取消设置 js var。为避免这些情况,您可能会在客户端上设置一个较大的超时时间,如果服务器在该超时时间内没有响应,您会显示一条错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多