在设计网络层以方便升级/向后兼容性时,是否有正确的模式

本文关键字:是否 模式 兼容性 网络层 计网 方便升 | 更新日期: 2023-09-27 18:00:56

我目前正在编写iPhone应用程序和附带服务器的网络层。iPhone应用程序在主机模式和访客模式下运行,还与服务器通信,用于在设备之间通过3G中继消息。两者都是用C#编写的,im使用套接字。出于速度和效率的原因,我想坚持使用二进制通信。

是否有正确的设计方法来设计网络层,特别是将在服务器和客户端之间传输的数据包?

我应该创建一个基类作为我的第一个版本,它允许系统的基本操作,然后从中继承以用于未来的版本和更改,并序列化它吗?

我知道XML是一种选择,但我做了一些测试,iPhone上的XML序列化比二进制序列化慢几个数量级,而且最终,网络层的某些部分需要是二进制的,就像在设备之间发送文件一样。

我的应用程序需要前后兼容不同的版本。我不希望在未来对功能有很大的改变,但可能会有一些新功能。

我读过这个问题:.NET与BinaryFormatter 的向后兼容性

最后一个答案似乎是最好的选择,使用"手动"反序列化和序列化方法。我只是想知道这是唯一的选择吗。

在设计网络层以方便升级/向后兼容性时,是否有正确的模式

对不起,你的问题太含糊了。你需要做一些阅读,然后带着一些更清晰的问题回来。

听起来你确实打算使用C#,它在iOS设备上不起作用。因此,您将不得不为设备和服务器编写单独的代码。考虑到这一点,网络数据包(XML或二进制(的结构就不那么重要了,因为它们在两个系统上的处理方式不同。

我认为,大多数人都建议使用XML或JSON,因为它们有广泛的支持,并且更容易使用一些自定义的二进制格式。它们是否比二进制形式慢在很大程度上取决于您的数据。我们总是首先问的一个古老的问题是,差异是否足以引起注意,以保证付出额外的努力。在大多数情况下,可能不会。有时,人们往往过于强调速度的必要性,没有意识到除非你有很多数据要传输,否则你的网络连接,而不是你的数据包格式,将是限制因素。

因此,我可能会理解等式的每一端(服务器C#和iPhone Objectice C(的方式是创建一个单独的类来管理通信,以及一个或多个类来处理串行化/去串行化。这为您提供了在需要时交换技术的灵活性。