当它太大时拆分caldav PROPFIND响应

时间:2013-11-25 09:05:57

标签: mobile webdav icalendar 3g caldav

我有自己开发的CalDAV实现,通常工作正常,但有一个问题。 有些客户拥有数百个日历,这些日历通过移动网络进行同步。 每当iCalendar询问深度= 1的PROPFIND时,我的服务器必须回答完整的日历列表,这些日历会因为移动网络不稳定而导致响应失败。

我认为以较小的块(例如每个响应30个)分割响应会有所帮助,但我不知道它是否真的可能。

所以问题是 - 我可以通过N个日历的块连续请求强制客户端PROPFIND日历吗?

3 个答案:

答案 0 :(得分:1)

不,没有达成一致的标准。

话虽如此:(1)你压缩了回应吗? (2)你看过http://tools.ietf.org/html/draft-murchison-webdav-prefer-05吗?

答案 1 :(得分:0)

当你说“100's日历”时,你的意思是“百事可乐”吗?因为具有100个项目的PROPFIND响应实际上并不大,这完全正常。但是,日历中的事件列表通常很大。但Apple通常会做很好的caldav客户端,他们应该在适当的日期范围内做REPORT请求,这样他们就不会收到太多事件。

您的Caldav服务器可能无法实现全部报告,因此客户端可以采用更简单的方法。

答案 2 :(得分:0)

正如布拉德所提到的,您需要区分日历中的日历数量和事件数量。

拥有数百个日历是非常不寻常的,但这应该是有点好的。具有100个结果的PROPFIND不是太大。另请注意CTag,如果有,您可以知道是否需要首先同步日历内容。

你很可能实际上是在询问一些包含很多事件的日历,可能是数千个。在这种情况下,日历上的PROPFIND:1抓住ETag以检查更改可能变得大而慢。 (在任何情况下都要确保你支持Accept-Encoding:gzip和Brief:T)。

对于这种情况,有一个RFC解决方案:RFC 6578.使用sync-reports,您只需要返回自上次同步后更改的记录。它受iOS和iCal的支持。 该规范还支持批处理(在RFC中称为截断),但并未在所有客户端中实现。