常见存储和下载方式的原理

ooowl
  • Web系统设计
  • 队列和对象存储
About 4 min

常见存储和下载方式的原理

比较零碎,到时候在这里整理整理。

HTTP server的存储 FTP和SFTP SMB WebDAV

短链接服务

rsync NFS scp

BT和P2P

常见压缩算法 7z zip bzip

一般文件分发的加密和安全性 到时候整理一下

RSS协议

RSS的的主体是一个文件,每次发布者更新文件,订阅者打开阅读器的时候,拉取文件然后对比获取哪些是新信息。先上标准示例

一个够用的符合RSS2.0标准的订阅源
<?xml version="1.0" encoding="UTF-8"?> <!-- XML声明:指定XML版本和字符编码 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"> <!-- version指定RSS版本,xmlns定义命名空间 -->
  <channel> <!-- 包含订阅源的所有信息 -->
    <atom:link href="https://example.com/rss.xml" rel="self" type="application/rss+xml"/> <!-- 指向RSS文件本身的链接,用于自引用 -->
    <atom:logo>https://yoursite.com/logo.png</atom:logo><!-- 订阅源的Logo [^1] -->
    <title>示例订阅源</title> <!-- 订阅源的标题名称 -->
    <link>https://example.com/</link> <!-- 订阅源对应的网站主页链接 -->
    <description>这是一个示例订阅源</description> <!-- 订阅源的描述信息 -->
    <generator>vuepress-plugin-feed2</generator> <!-- 生成此RSS的软件或工具名称 -->
    <docs>https://support.google.com/merchants/answer/14987622?hl=zh-Hans</docs> <!-- 指向RSS规范文档的链接(可选) -->
    <category>示例分类1</category> <!-- 订阅源的分类标签可以有多个,非必需一般给搜索引擎用 -->
    <category>示例分类2</category>
    <language>zh-CN</language> <!-- 订阅源使用的语言 -->
    <pubDate>Mon, 01 Jan 2024 12:00:00 GMT</pubDate> <!-- 订阅源的创建日期 [^2]-->
    <lastBuildDate>Mon, 01 Jan 2024 12:00:00 GMT</lastBuildDate> <!-- 订阅源最近更新的日期,这个时间比上次检查时更新,阅读器就知道需要重新获取内容 [^3]-->

    <item> <!-- 表示订阅源中的一篇文章或条目 -->
      <title>示例文章1</title> <!-- 文章的标题 -->
      <link>https://example.com/article1</link> <!-- 文章的完整URL链接,用户点击跳转的就是这个 [^4]-->
      <guid>https://example.com/article1</guid> <!-- 文章的全局唯一标识符,推荐使用URL,Rss阅读器通常用这个去重 [^5]-->
      <description>这是第1篇示例文章的描述</description> <!-- 文章的简短描述或摘要 -->
      <pubDate>Mon, 01 Jan 2024 12:00:00 GMT</pubDate> <!-- 文章的发布日期和时间 [^6]-->
      <atom:updated>Mon, 01 Jan 2024 12:00:00 GMT</atom:updated> <!-- 文章的最后更新时间 [^7]-->
      <content:encoded><![CDATA[<p>示例内容1</p>]]></content:encoded> <!-- 文章的完整HTML内容,使用CDATA包裹 -->
    </item>

    <item> <!-- 第二篇文章 -->
      <title>示例文章2</title>
      <link>https://example.com/article2</link>
      <guid>https://example.com/article2</guid>
      <description>这是第2篇示例文章的描述</description>
      <pubDate>Mon, 01 Jan 2024 11:00:00 GMT</pubDate>
      <atom:updated>Mon, 01 Jan 2024 11:00:00 GMT</atom:updated>
      <content:encoded><![CDATA[<p>示例内容2</p>]]></content:encoded>
    </item>
  </channel>
</rss>

注意事项在示例中标注了

  1. 大多数现代RSS阅读器会自动检测并使用网站的favicon.ico作为订阅源图标,无需在RSS中明确指定。
  2. 订阅源的创建日期一般是不变的
  3. 订阅源最近更新的日期,这个时间比上次检查时更新,阅读器就知道需要重新获取内容,每次生成的时候变更就行
  4. 文章的完整URL链接,用户点击文章跳转的就是这个
  5. 文章的全局唯一标识符,推荐使用URL,Rss阅读器通常用这个去重
    • guid不影响点击跳转,可以用这个让RSS以为是新文章
    • 即使 <pubDate><atom:updated> 时间很老,只要GUID是新的,就会被识别为新文章,检查优先级高
  6. 文章的发布日期和时间,理论上也是一次性的,大部分旧的阅读器按照这个排序
    • 你可以每次更新发布日期让阅读器以为这是新文章,从而让你有新内容的旧文章每次被当作新文章被拉取
  7. 文章的最后更新时间,每次更新,这个是atom空间定义的,很多阅读器不用这个字段
    • 如果支持阅读器文章的最后更新时间那就直接用这个,不用整花活了
    • 实际上主要的排序还得看阅读器的行为
  8. 阅读器可能有缓存或者定期刷新,有可能加上后过一会用户才能收到


Last Edit: 2025-09-16 15:45:38
Loading...