可能是一个很蠢的问题,在调用别人服务的时候,由于网络的原因,认证很慢。自己拿到返回的数据还需要处理,。这里怎么处理?让线程睡 sleep? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
funky
V2EX    Java

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

  •  
  •   funky 2015-11-24 18:31:44 +08:00 4530 次点击
    这是一个创建于 3680 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    015-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  
    PRO
       2015-11-25 14:12:08 +08:00
    消息队列处理
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1476 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:22 PVG 00:22 LAX 08:22 JFK 11:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86