登录

java - web端百度网盘的一个操作为什么要分两次请求服务器, 有什么好处吗

以 文件重命名 为例:

返回如下结果

{
  "errno": 0,
  "info": [],
  "request_id": 88137407060055336,
  "taskid": 307843054247316
}

可以联想到在server端建立了一个task, 并返回了taskid让客户端后续取状态来更新ui

#进行中的返回值
{
  "errno": 0,
  "request_id": 88137707954758994,
  "task_errno": 0,
  "status": "pending"
}

#进行中
{
  "errno": 0,
  "request_id": 88137707954758994,
  "task_errno": 0,
  "status": "running"
}


#操作成功的返回值
{
  "errno": 0,
  "request_id": 88138584419582326,
  "task_errno": 0,
  "status": "success",
  "list": [
    {
      "from": "/test1/我的照片",
      "to": "/test1/我的照片2"
    }
  ],
  "total": 1
}

当 status 为success时候, 则轮询结束, 更新UI元素

问题: 直接访问重命名接口不行吗? 为什么要这么设计, 好处是什么?

# Java
迷茫迷茫2177 天前589 次浏览

全部回复(3) 我要回复

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:50:35

    你已经说的很清楚了啊,还有什么不明白的?

    第一次就是向服务器发起改名申请。
    服务器就开始任务。
    后面的轮询都是在查询任务是否完成,完成了前端做相应操作,万一失败了,前端还要做回滚操作。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-18 10:50:35

    猜一下原因:极端情况下, 操作可能会耗时很久, 无法立即返回. 在操作完成的时候, socket链接可能已经断开, 无法获取到最终的结果. 设计成任务队列的方式, 能保证客户端获取到最终的结果.

    回复
    0
  • PHPzhong

    PHPzhong2017-04-18 10:50:35

    除了上面的一些考虑,可能还有一个很重要的原因,那就是并发压力。做成异步,能很好解决并发

    回复
    0
  • 取消回复发送