刚刚通过 youtube 了解这一点,但无法找到我的问题的答案:读者如何知道有更新。
就像黑莓中的 Push 一样吗?
RSS 是一种拉式技术。读者时不时地重新获取 RSS 提要(例如每小时两次,或者如果读者知道这是经常更新的提要,则更频繁)。
该提要通过常规 HTTP 提供,并由一个简单的 XML 文件组成。它总是从同一个 URL 获取。
它只是定期检查提要更新。
最近有一个名为 pubsubhubbub 的新协议可以将 feed 推送到监听器。但这需要出版商的支持。
这里是支持实时RSS推送的网络服务列表,包括Google Reader、Blogger、FeedBurner、FriendFeed、MySpace等
让我们总结一下:
推或拉,在这两种情况下,您仍然需要编写一些代码来更新站点、数据库或存储/显示它的任何地方的 RSS 列表。
而且,作为一个附带问题,没有必要在每次拉取时请求整个 XML 来查看内容是否已更改:使用不链接到 RSS 的标准,但对整个 HTTP 协议是全局的(etag 和最后一个) -modified headers),您可以知道 RSS 页面在给定日期之后是否被修改,并且仅在修改时获取整个 XML。
这是一个拉力。这就是为什么您必须配置阅读器刷新提要的频率。
如果您查看 google rss feed,它有最后生成的日期
例如
<lastBuildDate>Fri, 27 Sep 2024 11:15:17 GMT</lastBuildDate>
<lastBuildDate>Fri, 27 Sep 2024 11:18:31 GMT</lastBuildDate>
<lastBuildDate>Fri, 27 Sep 2024 11:23:16 GMT</lastBuildDate>
<lastBuildDate>Fri, 27 Sep 2024 11:25:24 GMT</lastBuildDate>
通常会设置一个 cron 作业来根据提要项目的更新或添加频率等来查询提要。
现在我猜这个资源可以被缓存,但据我所知,提要每隔几分钟就会更新一次。
有趣的是提要中的项目可能会有所不同。一分钟内某个项目可以包含在 feed 中,但不能保证下次获取 feed 时该项目仍然存在。换句话说,饲料生成似乎是为了速度而不是一致性而设计的。我见过一些例子,其中一个项目在那里,然后又消失了,然后又出现了。
使用 feed 的另一个挑战是,可以通过一个或多个 guid 在 feed 中访问单个资源或 URL。例如有时会使用或不使用查询字符串来访问资源。如果 google 对带有或不带有查询字符串的页面进行索引,它可能会生成多个具有不同 guid 的 feed 项,指向相同的资源。