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

2015-11-24 18:31:44 +08:00
 funky
3973 次点击
所在节点    Java
21 条回复
hienchu
2015-11-24 18:34:08 +08:00
async?
loryyang
2015-11-24 18:37:02 +08:00
回调函数?
lecher
2015-11-24 19:09:40 +08:00
封装一个回调处理
扔到线程去执行
k9982874
2015-11-24 19:12:38 +08:00
消息队列
larry618
2015-11-24 19:18:37 +08:00
使用 java 回调机制就可以了
funky
2015-11-24 20:01:48 +08:00
@hienchu
@larry618
@lecher
@k9982874
@loryyang
这里用回调的话我又得输出到前台了,但是用户就是关注在我这边处理后的结果
yghack
2015-11-24 20:07:14 +08:00
@funky 我们的处理方式是超过一定的时间没收到回调,就告诉用户第三方接口延迟。第三方的确实坑啊。
felixzhu
2015-11-24 20:15:25 +08:00
要么 IO 复用,异步返回

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238601

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX