0

好的,所以我的目标是构建一个易于使用的协议,用于通过 tcp 发送数据。基本上,它会通过 tcp 发送一条消息和一个对象(类型未知)。要发送,它只需要一个方法调用,而接收它也只需要一个。

所以这就是我想格式化“消息”的方式。

length_of_message - “作为消息的字符串” - length_of_Object - 对象

length_of_message 将是一组字节数。连同length_of_Object。

实际的消息字符串和实际的对象将是可变长度的。

如果不知道对象的实际类,我可以以某种方式将其声明为“通用对象”吗?然后从“通用对象”中获取其类名,消息会告诉接收者如何处理该对象?

如果它是一个常量对象类型会很简单,但我希望能够为需要发送/接收的任何对象使用一个发送函数和一个接收函数。

有什么建议么?

谢谢,安德鲁

4

1 回答 1

2

确保您没有重新发明轮子(除非这样做是您的主要目标)。

考虑到这一点,请考虑:

• 实施和使用 NSCoding 协议。它允许对复杂连接的对象图(包括循环)进行有效归档。

• 使用HTTP 代替原始TCP。虽然它在标头中增加了一点开销,但正文可以是直接编码的数据。更重要的是,HTTP 无处不在。它几乎可以路由任何东西,而其他协议可能会被阻止(想想代理服务器)。

• 通过HTTP,您可以利用压缩。如果您的通信管道的一侧是某种现有的 Web 服务器,它可能已经支持 gzip 通信。压缩 NSData(这将是 NSCoding 的结果)是微不足道的。

• 或者,坚持使用直板。

除非您确实有一些要求使上述方法不可行,否则您最好利用上述技术而不是推出新的技术。

话虽如此,你的提议很好。我可能会添加如下结构:

[标题][MSGID][LEN][TYPE][数据长度][POST]

POST 是一个已知的字节序列,接收者可以验证它以确保所有数据都被正确接收。或者您可以全力以赴并集成校验和。或者可以根据需要重复子片段(即 [LEN][TYPE][DATA] 一遍又一遍。

于 2012-04-09T05:11:58.630 回答