0

这是一个 RSS 提要 (A),用户可以在其中添加多个图像,但他/她也可以添加来自不同用户的带有图像的 RSS 提要 (B)。当请求提要 (A) 时,服务器会获取提要 (B),然后将提要中的图像添加到请求的提要 (A) 中。

有哪些机制或选项可以防止无限循环递归?
例如,当饲料 (B) 还包括饲料 (A) 时

// Feed A setup
// - image1a
// - image2a
// - feed-B

// Feed B setup
// - image1b
// - feed-A

// fetching / assembling feed A
// - image1a
// - image2a
// - (A fetches feed-B)
// - image1b
// - (B fetches feed-A)
// - image1a
// - image2a
// - (fetched A fetches feed-B again)
// - image1b
// - (second B fetches feed-A again)
// .. recursion
4

2 回答 2

1

事实证明,解决方案分为几个阶段。

1 锁定:根据请求返回缓存 XML 的副本。在构建提要 XML 期间,设置一个锁。这可以防止正在获取此提要的外部提要触发第二个新构建。外部提要仅接收缓存的 XML。

2 识别项目:锁停止了一个潜在的失控进程,但提要 XML 确实会在每次请求时使用先前缓存的 XML 项目增长。为防止重复,为每个“guid”字段添加一个唯一标识符。如果某个项目是 feed 拥有的,请不要包含它并记录一条消息(并在需要时通知)。

于 2013-05-08T15:20:49.567 回答
1

有三种解决方案:

  • 将原始提要 ID 与每个项目一起存储,并仅转发最初为每个提要创建的项目,
  • 或转发每个提要的所有项目,并传递该项目所在的所有提要的列表(并检查该列表),
  • 或者为每个 RSS 使用唯一的 itemID,只存储一次,在 itemID 上放置唯一的约束或主键,因此永远不要为每个提要存储两次。
于 2013-05-08T14:56:50.313 回答