关于实时获取网站数据的一个问题
某个网站每天8点到10点间 每隔10分钟更新一次数据 但是并非准时更新(一般可能延迟几秒或者几分钟更新)。现在我这边想要实时获取该网站更新的数据。所以用了定时器8点到10点每隔十分钟发起请求获取网站数据 由于定时器只会准点请求 所以无法达到实时的效果 于是我想着从定时器开始请求时 如果没拿到数据就sleep一秒再请求 直到拿到数据为止 但是定时器里面用sleep好像存在一些问题 想问下大家有什么优雅的方案能解决这种问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
定时执行的时候检验上一次的数据,如果不同就去抓取新的数据,相同就等待,将数据高速缓存应该对性能影响不会太大,还有一种方式就是将数据切割成多个小块,分块检测
如果是你的网页要显示的话 可以每次有人请求你的网页的时候去抓取信息 不过肯定会慢点
对方网站并不在我们的控制范围内 所以主动推送和websocket等都不可以
用websocket行不,双工通信。你们谁想给谁主动握手。
嗯 我也知道对方主动推送是最优方案,但是目前由于一些原因无法实现。 主要是对方的数据更新的频率并不高,是定时的却又不准时, 我这边的频率高了浪费资源 低了又达不到实时性,所以感觉很尴尬。
如果能跟对方网站合作,就让对方主动给你们推送吧,如果不行,就只能定时轮询了,至于你愿意花多少资源区轮询,就看数据的重要性了,就像我们网站,重要数据轮询间隔200毫秒 不重要的10分钟
可不可以通过触发一个script定时器脚本去请求php脚本,这样php每次执行完就会释放内存
目前是对方提供了数据接口,但是不愿意主动推送。
写一个爬虫定时爬取
对的
回复
可以把本地结果哈希一下,带着这个哈希值到了对方服务器把服务器的结果页哈希一下,两者结果对比,如果相同,说明对方结果没变化,你就不用获取数据返回,返回后也简单处理一下就行。这样就可以加大访问频率而不浪费资源。
本来这个网站更新的频率就不大 用那种一直跑的太浪费资源了
回复
那就cronjob 8点启动脚本,10点之后脚本自己判断是否应该退出。你想要定时器一秒执行一次,不现实!
写一个脚本在后台一直跑,有数据就操作,没数据就sleep