爬虫之获取进度--keep alive+轮询

2021-12-22 15:10:44 浏览数 (1)

今天面试被问到一点,如何获取进度来优化用户体验. 哈哈哈,之前自己好像没有考虑到这一点,现在发现了自己做项目和企业项目的一处不同,自己做项目总是站在自己的角度考虑,而企业做项目是给用户群用的,我们要更多的考虑用户体验,安全性问题,并发抗压等等,也算是给自己增加了一个学习的点.感谢这次面试的考官.

说一下自己的思路:

我想到的是可以把要爬取的关键字放redis里,如果爬了就给销毁 我们在前端可以设置一个ajax不断轮询调用后端程序,请求查询当前reidis还剩多少关键字,比上初始的数量,既可以得到当前的进度条.

高级思路

keep alive 轮询 http有个关键字keep alive,设置完了就可以复用链接,然后客户端轮训,服务端hold住链接 有数据了就返回 服务端方面,来一个关键字开一个线程去处理,并记录,记录哪里 临时存储都行,redis,bitmap,hash随便,处理完了置成功,轮询的时候来一个请求就轮询一边临时存储,看有哪些ok了返回给前端,这块相当于poll,也可以变成callback

ps: 关于长连接,大概讲是一个约定,表示http req resp完了不要断开tcp,直到一定条件后,放开链接,这段时间的req都可以复用原来的

之前虽然知道长连接,但是不懂其作用,也好奇过大部分短视频如何做到一个实时进度的,虽然一直有疑问,但是不知道如何下手,今天听位大佬讲了一下长连接方面的作用才懂,现在想想,那些在线页面的客服聊天小窗口估计都是keep alive加轮询用得比较多吧...

如果还不理解可以随便打开个视频打开f12 network 会发现里面很多.ts文件刷出来...就懂了,其实他们都是采用分段发送持续返回到我们的浏览器的.大致也是维持了这么一个长链接,所以才能不断返回

关于网络方面,参考即时通讯网

http://www.52im.net/thread-224-1-1.html http://www.52im.net/thread-334-1-1.html http://www.52im.net/thread-1273-1-1.html

0 人点赞