协议设计

时间:2010-11-26 06:48:58

标签: android xml protocols protocol-buffers

我有一个客户端服务器程序,使用usb基于http://www.anothem.net/archives/2010/10/15/android-usb-connection-to-pc/

与Android手机进行通信

现在我需要设计一个便于从个人电脑到手机交换信息的协议。我该怎么办呢?我们应该使用XML吗?我正在看谷歌协议缓冲区..这是正确的方向吗?

由于 卡罗琳

2 个答案:

答案 0 :(得分:4)

我一直在Android上使用协议缓冲区。我很长一段时间都避免使用它,因为它有点矫枉过正。那是在我花了半天时间尝试之前。

这是我的结果,花了一个下午。起初它将我的APK大小从2.89梅增加到3.1兆。我认为这无关紧要。然后我发现我能够删除我到处都有的代码,我一直在手动解析。我能够删除需要以特定顺序进入数据的代码。

然后我能够完全删除我在我的应用程序中的几个类,其目的是作为临时的,轻量级的仅信息“模型”类,表示来自或来自数据流的数据。简而言之,它开始使事情变得更容易,更小,更可靠。

协议缓冲区对您的情况可能不是最好的选择。但我建议您花几个小时试一试。这样你就可以决定将它从实力和知识的位置上抛弃。

请务必使用精简版协议缓冲区。 .jar文件是160k,但它带来的功能量很大。我将从现在开始一直使用它。

在游戏环境中长期使用动态内存分配/垃圾回收时,我确实有些担忧。但是现在序列化很少发生,对我来说这不是问题。

另一个好处:我有一些Python代码可以生成应用程序读取的数据文件。该python代码处理一些XML,然后生成二进制文件。我想我可以通过使用协议缓冲区的文本模式完全消除该代码,然后直接使用protoc创建二进制文件。

答案 1 :(得分:3)

首先需要设计协议的更高层。 Xml和协议缓冲区与数据的格式化有关。根据您需要交换的数据,它们可能适合也可能不适合。从评论的方式来看,您似乎希望为您的PC开发类似遥控器的东西。在这种情况下,XML和Google Protocol Buffers都将是一个过度设计。只需创建一个文本协议,为命令类型分配一个或两个字节,为数据体分配一些字节。

查看AT commands结构。 HDLC框架的结构也可以为您提供一些想法。这有一些你不需要的错误检查,但除了简单的文本协议将使用类似的字段。