我当前正在编写iPhone应用程序和附带服务器的网络层。 iPhone应用程序在主机模式和访客模式下运行,并且还与服务器通信,用于在设备之间通过3G中继消息。两者都是用C#编写的,即时通讯使用套接字。我希望坚持使用二进制通信,以提高速度和效率。
是否有正确的设计方法来设计网络层,特别是将在服务器和客户端之间传输的数据包?
我应该创建一个基类作为我的第一个版本,它允许系统的基本操作,然后继承它以便将来的版本和更改,序列化吗?
我理解XML是一种选择,但我做了一些测试,并且iPhone上的XML序列化比二进制序列化慢几个数量级,并且最终,网络层的一部分需要是二进制的,因为我在设备之间发送文件。
我的应用需要向后和向前兼容不同的版本。我希望将来对功能有很大的改变,但可能会有某种形式的新功能。
我读过这个问题:Backwards compatibility in .NET with BinaryFormatter
最后一个答案似乎是最好的选择,使用“手动”反序列化和序列化方法。我只是想知道这是唯一的选择。
答案 0 :(得分:0)
抱歉,您的问题太模糊了。你需要做一些阅读,然后回答一些更清晰的问题。
听起来好像您打算使用C#,这在iOS设备上无效。因此,您将不得不为设备和服务器编写单独的代码。鉴于此,您的网络数据包(XML或二进制)的结构不会那么重要,因为它们将在两个系统上以不同方式处理。
我认为大多数人都会推荐使用XML或JSON,因为它们具有广泛的支持,并且更容易使用某些自定义二进制格式。它们是否比二进制形式慢,将取决于您的数据。而我们总是首先要问的古老问题 - 显着的差异足以保证额外的努力。在大多数情况下,可能不是。人们往往过分强调速度的必要性,没有意识到除非你有大量的数据需要传输,否则你的网络连接,而不是你的数据包格式,将是限制因素。
因此,我可能会评估等式(服务器C#和iPhone Objectice C)的每一端的方式是创建一个用于管理通信的单独类和一个或多个用于处理序列化/反序列化的类。这使您可以根据需要灵活地交换技术。