2013-02-16 96 views
16

我有一组事件保存在我的数据库(一个非常特殊的数据库,所以我不能使用一些流行的开源服务器,比如说MySQL)。现在我想构建一个CalDav服务器(通过Java),以便用户可以将他的日历客户端连接到它以检索或修改事件。我是新手,所以有很多问题,希望你们帮助我。开发CalDav服务器

  1. 什么是一般步骤?

  2. 我需要提供一个servlet吗?如果是,那么我必须返回什么要求?一个JSON或XML或.ics文件?

  3. 当用户订阅我的日历时,是否意味着他的客户端会在间隔后拉我的服务器(调用servlet)。

更新:这是1岁的问题,因为我第一次问,但我得到了相当长的一段upvotes,所以我有义务提供一些信息:最后我用米尔顿库http://milton.io/,它抽象掉在servlet中,你只需编写函数来返回数据。该图书馆的作者是相当有帮助和信息。最终结果是:我们的caldav服务器已经工作。

我也接受埃弗特的答案。

+0

你好 - 你还在使用milton.io吗?它是如何去的? – avijendr 2017-08-23 22:50:35

回答

4

阅读RFC: http://tools.ietf.org/html/rfc4791

不只是一次,你要至少顶部阅读它到底4倍。

除此之外,您还应该阅读RFC的WebDAV,WebDAV ACL和iCalendar。

你会在这里得到的任何答案都是重复那里的内容,并试图简化这个过程是徒劳的,因为你真的需要对规范的大部分有完整的理解。

具体回答你的问题:

  1. 是完全过于含糊回答。一般的步骤需要理解规范并编写服务器。鼓励具体细节。
  2. 您需要能够响应HTTP请求的内容。无论是servlet还是其他东西都不那么重要。 CalDAV是HTTP的扩展。为meta-information返回XML报告,iCalendar是实际日历数据的默认格式。对于许多http请求,iCalendar被包装在xml主体中。现在,服务器也开始支持xCal和jCal。后两者都是可选的,你必须必须支持iCalendar
  3. 通常,它们将在客户端定义的时间间隔进行轮询。有pub-sub机制,但目前没有标准,并且有各种各样的实现。讨论已经开始为此提供标准的交通工具,但这可能需要一些时间才能完成。 (年)
+3

这个问题有3点。你的“答案”不提供任何答案。 – bjedrzejewski 2013-10-18 14:01:25

+1

我的答案提供了提供所有答案的官方文档的参考。实施了流行的CalDAV服务器后,如果不阅读文档,甚至无法启动。 – Evert 2013-10-18 15:06:24

+1

我同意你的看法,但我不同意这篇文章回答了3个问题,这可能不需要阅读整个文档就可以回答。这更多的是关于SO的格式的讨论,而不是你刚才所说的真相。 – bjedrzejewski 2013-10-18 15:14:57

5

让我试试看;-)

哪些一般步骤?

正如Evert所述,您需要实施CalDAV服务器。根据您想要支持的功能,这是非平凡的,需要了解相关规范(iCalendar RFC 5545和CalDAV 4791,WebDAV RFC 4918)。

实现CalDAV服务器的一般步骤是什么?您需要HTTP入门点:

一)服务帐户信息(WebDAV中称为校长),这包括根据何种网址帐户直播

B)的日历服务的日历列表(称为日历主页,来自a)的主要信息指向此)

c)为实际日历提供服务,即包含在这些事件中的事件。 CalDAV日历是'iCalendar'资源的特殊WebDAV集合。 iCalendar是表示事件的格式。

根据您希望支持的CalDAV功能,这可能会更复杂(例如服务器端调度)。有更快的同步(同步报告)或上传等优化。您不需要全部开始。

我需要提供一个servlet吗?如果是,那么我必须返回什么要求?一个JSON或XML或.ics文件?

正如Evert所说,您如何实现HTTP端点是您的选择。 Servlet是一个可行的选择。 在(WebDAV)XML(多状态响应)中返回日历中项目的主要信息,日历列表和URL。 事件的实际内容需要以iCalendar(.ics)格式返回。

当用户订阅我的日历时,是否意味着他的客户端会在间隔后拉我的服务器(调用servlet)。

是的。

一些CalDAV实现还支持Push(服务器可以在新数据可用时告诉客户端),但这还没有标准化,实现也有很大差异。 如果您的服务器使用CTags和同步报告(RFC 6578),则轮询可以保持较快。