我有自己开发的CalDAV实现,通常工作正常,但有一个问题。 有些客户拥有数百个日历,这些日历通过移动网络进行同步。 每当iCalendar询问深度= 1的PROPFIND时,我的服务器必须回答完整的日历列表,这些日历会因为移动网络不稳定而导致响应失败。
我认为以较小的块(例如每个响应30个)分割响应会有所帮助,但我不知道它是否真的可能。
所以问题是 - 我可以通过N个日历的块连续请求强制客户端PROPFIND日历吗?
答案 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中称为截断),但并未在所有客户端中实现。