0

我被要求构建应用程序的一部分,用于下载二进制数据并通过套接字将某些二进制数据发送回服务器。原因是他们需要闪电般的交易。

过去我只使用带有 JSON/XML 的 Web 服务。

有人可以指出我需要学习执行这些功能的正确方向吗?

谢谢

4

2 回答 2

2

首先,在套接字上执行二进制并不能保证“闪电般快速”。您需要确保您发送的内容紧凑,并且可以在接收端快速处理。

话虽如此,我建议对数据使用协议缓冲区。它结构紧凑,经过良好测试并且易于在服务器和客户端上处理:https ://code.google.com/p/protobuf/ 。这将使您可以在 .proto 文件中很好地定义域对象,并在客户端和服务器应用程序之间共享这些对象。甚至支持使用 protoc 生成objective-c:https ://code.google.com/p/metasyntactic/wiki/ProtocolBuffers 。请注意,协议缓冲区本身实际上并不提供通过套接字使用的协议,但您可以使用一个非常简单的协议,例如使用协议缓冲区的长度写入 4 个字节,然后协议缓冲区本身紧随其后(https://developers .google.com/protocol-buffers/docs/techniques#streaming)。

就如何发送而言,CocoaAsyncSocket 是在 iOS 上编写基于套接字的应用程序的好方法:https ://github.com/robbiehanson/CocoaAsyncSocket 。然后你的应用程序可以像构造你的 protobuf 对象一样简单,调用data它的方法来提取NSData *表示,然后使用GCDAsyncSocket'swriteData方法发送它。

接收将是相同的。当您的委托GCDAsyncSocket通知有可用数据时,将其读出并将其解析到您的协议缓冲区实例。

于 2013-10-15T22:21:05.567 回答
1

Developer.apple.com 目前似乎已关闭,因此此链接可能不完全正确,但请查看 CFSocket以了解 Apple 直接公开的 TCP 套接字功能。这都是 Core Foundation C 的东西,但你最终会得到一堆相关的回调函数,当事务进入时调用,以及调用函数来发送数据。

于 2013-10-15T22:31:49.953 回答