设计应用程序协议

时间:2008-11-10 09:14:48

标签: networking protocols

我有一个现有的独立应用程序,它将由第三方使用网络协议进行扩展。这些功能已经实现,我只需要将它们暴露在外面。

假设已经选择了传输协议(UDP),是否有任何资源可以帮助我设计我的应用协议?

似乎有很多关于软件设计的信息,但没有关于协议设计的信息。 我已经看过Application Protocol Design

8 个答案:

答案 0 :(得分:5)

你看过Google Protocol Buffer了吗?这似乎是解决此问题的好方法。

您可以创建一个与现有应用程序通信的端点,然后使用protobuffer协议从“外部”进行响应。它是二进制的,所以它很小而且快速,你不必编写自己的协议管理器,因为你可以使用谷歌协议管理器。缺点是它必须在系统的两侧实现(在“服务器”端和消费者/客户端)。

答案 1 :(得分:5)

请参阅Jabber protocols design guidelinesRFC 4101。虽然它旨在让审阅者更容易理解RFC,但这个RFC提供了一些有趣的建议。

答案 2 :(得分:4)

首先,UDP主要是单向广播传输方法。此外,它可能有损耗,因此您需要能够处理丢失的数据包和无序数据包。如果您需要来自UDP的任何级别的可靠性,或者需要双向连接,那么您最终将需要来自TCP的所有内容,因此您可以继续使用它来开始并让网络堆栈处理它。 / p>

接下来,如果您的数据可能大于单个IP数据包,那么您将需要某种方法来识别每个数据包的开始和结束,以及处理非法或损坏数据包的方法。我建议使用包长度,某种页脚,也许是校验和的某种标题。

然后你需要一些编码消息和响应的方法。有很多RPC协议。您可以查看SOAP,或设计基于XML的自定义协议或二进制协议。

答案 3 :(得分:4)

protocol buffers的另一个建议 - 很好的紧凑二进制。但请注意,虽然二进制协议定义明确,但尚未达成一致的RPC标准(several are in progress,倾向于倾向于TCP或HTTP)。

规范使得different architectures中的客户端和服务器变得非常容易,这很好 - 而且它是可扩展的。

警告:我是其中一个.NET versions的作者,所以我可能有偏见;-p

答案 4 :(得分:1)

您应该认真考虑是否真的想要设计,记录和维护自己的协议或使用已有的协议。很可能已经有一个符合您需求的文档化协议。根据你正在做的事情,它最初可能看起来有点过分,实现所有规范看起来很乏味,而且比编写自己的规范要少得多,但是如果你打算让你的应用程序在几年内仍然积极开发它应该可以节省你大量的时间和金钱来使用已经存在并被第三方所知的东西。此外,如果您可以使用现有的库来执行该协议,那么实现部分应该更快。

设计新协议比实施新协议更有趣,但不如维护一个,因为你必须忍受所有缺陷。没有一个协议是完美的,但是如果你从未设计过一个,那么你可以放心,设计它会比设计现有众所周知的协议的人更加错误。

简而言之,尽可能利用已经存在的东西。

答案 5 :(得分:0)

如果您不想从头开始构建协议,则应该查看SOAP。对不同的编程语言的支持各不相同,但明确鼓励跨语言交流。

不幸的是,UDP和SOAP似乎一直处于起步阶段,最常用的是HTTP。

答案 6 :(得分:0)

如果您选择XML,请记住,您将有巨大的标记开销。

与xml相比,一个简单的二进制协议也不需要那么多的资源来解析。

答案 7 :(得分:0)

  

我有一个现有的独立应用程序,它将由第三方使用网络协议进行扩展。

了解您的计划的功能以及这些第三方扩展的性质将会有所帮助。也许使用UDP的一些理由?