V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
funky
V2EX  ›  Java

可能是一个很蠢的问题,在调用别人服务的时候,由于网络的原因,认证很慢。自己拿到返回的数据还需要处理,。这里怎么处理?让线程睡 sleep?

  •  
  •   funky · 2015-11-24 18:31:44 +08:00 · 3978 次点击
    这是一个创建于 3318 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2015-11-25 14:12:08 +08:00
    hienchu
        1
    hienchu  
       2015-11-24 18:34:08 +08:00
    async?
    loryyang
        2
    loryyang  
       2015-11-24 18:37:02 +08:00
    回调函数?
    lecher
        3
    lecher  
       2015-11-24 19:09:40 +08:00 via Android
    封装一个回调处理
    扔到线程去执行
    k9982874
        4
    k9982874  
       2015-11-24 19:12:38 +08:00
    消息队列
    larry618
        5
    larry618  
       2015-11-24 19:18:37 +08:00 via Android
    使用 java 回调机制就可以了
    funky
        6
    funky  
    OP
       2015-11-24 20:01:48 +08:00
    @hienchu
    @larry618
    @lecher
    @k9982874
    @loryyang
    这里用回调的话我又得输出到前台了,但是用户就是关注在我这边处理后的结果
    yghack
        7
    yghack  
       2015-11-24 20:07:14 +08:00
    @funky 我们的处理方式是超过一定的时间没收到回调,就告诉用户第三方接口延迟。第三方的确实坑啊。
    felixzhu
        8
    felixzhu  
       2015-11-24 20:15:25 +08:00
    要么 IO 复用,异步返回

    要么直接返回,丢给后台进程处理,用户端那边每次重新获取状态
    likuku
        9
    likuku  
       2015-11-24 23:57:10 +08:00
    网络的问题,那就去改善网络品质嘛
    FrankFang128
        10
    FrankFang128  
       2015-11-25 02:49:57 +08:00 via Android   ❤️ 1
    加 loading 动画
    t895
        11
    t895  
       2015-11-25 03:07:57 +08:00
    @FrankFang128 笑尿,以前这么干过,结果被用户打死了
    cnhongwei
        12
    cnhongwei  
       2015-11-25 08:53:10 +08:00   ❤️ 1
    封装一个回调异步处理,在页面上给用户一个提示就行了,你 sleep ,会让 http server 的连接池占满或 timeout 的。
    fuxkcsdn
        13
    fuxkcsdn  
       2015-11-25 08:58:47 +08:00 via iPhone
    我们之前和一家供应商合作过,最开始以为是网络问题,又是换线路又是架海外代理,依然无果
    最后 wget 打印详情发现卡在 wait response...卡了近 2/3 时间...(获取完整列表时,启用压缩情况下传输量是 3MB ,传输时间 10 秒左右, wait response 达到 50 秒...)
    wind4
        14
    wind4  
       2015-11-25 09:44:32 +08:00
    参考 Azure 的设计,将任务丢到一个后台异步队列里面去执行,用户随时可以查看任务执行进度。
    topkyo
        15
    topkyo  
       2015-11-25 10:42:16 +08:00
    异步消息队列处理这类问题额
    aec4d
        16
    aec4d  
       2015-11-25 10:50:08 +08:00
    以 python web 框架性能对比为例 http://klen.github.io/py-frameworks-bench/ 这种情况异步请求模型就吊打多线程请求模型 当然这只是对比的单位时间内能响应的并发请求数 意味着并不能显著降低后端 web 服务器调用第三方服务的时间 所以还是像 10 楼那样加一个 loading 动画欺骗下用户比较好 你说的 sleep 差不多就是异步请求模型 至于任务队列 这完全是另外一种模型嘛 比如用户上传一个下载链接 然后你的服务器去下载 这个时候需要告知用户下载进度 不过我觉得题主的疑问是第一种情况
    wate
        17
    wate  
       2015-11-25 11:03:44 +08:00
    sleep is stupid
    funky
        18
    funky  
    OP
       2015-11-25 11:05:01 +08:00
    @aec4d 你说的不错。现在的做法就是 loading 动画。这里考虑到用户体验,最好是同步的,但是认证需需要花费时间。只能做 loading 等待状态更新,至于任务队列在后端管理上用的多,在这个场景下个人感觉不是很合适
    aec4d
        19
    aec4d  
       2015-11-25 11:11:38 +08:00
    @funky 我试过即使 20 秒的等待 只要动画效果够炫酷 都是能忍受的 如果超过了。。。。个人感觉还是想别的办法优化吧 比如网络。。。毕竟是同步的
    hienchu
        20
    hienchu  
       2015-11-25 14:07:21 +08:00
    @funky 异步只能解决阻塞的问题,的确不能直接等同于用户体验。从逻辑上来讲,如果用户在获得返回之前必须什么都不能做(比如认证),那就只能优化认证过程。
    Tink
        21
    Tink  
       2015-11-25 14:12:08 +08:00
    消息队列处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1682 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.