objective-c - 如何有效地通过 tcp 发送对象

标签 objective-c ios object tcp nsdata

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

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

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

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

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

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

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

有什么建议吗?

谢谢, 安德鲁

最佳答案

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

考虑到这一点,考虑:

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

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

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

• 或者,坚持使用直立柱。

除非您确实有某些要求使上述内容无法实现,否则您最好利用上述技术而不是推出新技术。

话虽如此,您的建议很好。我可能会添加这样的结构:

[HEADER][MSGID][LEN][TYPE][len 的数据][POST]

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

关于objective-c - 如何有效地通过 tcp 发送对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068998/

相关文章:

ios - 在平移手势或拖动上更改 View Alpha

python - Apple Mail.app 使用插件设置 HTML 签名

ios - Segue相关函数

ios - 检查互联网连接是否可用

java - 是 M :N a bad style in OOP? 有没有更好的办法来管理 m :n relationships?

java - 构造与文件规范相关的 Java 哈希表的最有效方法是什么

objective-c - swift 1.2 : Implement optional property from Objc protocol

iPhone UIPickerview reloadAllComponents 不起作用

iphone - UILocalNotification 或推送通知

javascript - 如何访问函数的属性?