我被要求构建一个下载二进制数据的应用程序的一部分,并通过套接字将某些二进制数据发回服务器。原因是他们需要快速交易。
过去我只使用带有JSON / XML的Web服务。
有人能指出我正确的方向,我需要学习如何执行这些功能吗?
由于
答案 0 :(得分: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
的{{1}}方法发送它
接收将是相同的。当您在writeData
上的代理被通知有可用数据时,请将其读出并解析为您的协议缓冲区实例。
答案 1 :(得分:1)
Developer.apple.com目前似乎已关闭,因此此链接可能不完全正确,但结帐CFSocket表示Apple直接公开的TCP套接字功能。它是所有Core Foundation C的东西,但是你最终得到的是一堆相关的回调函数,每当事务进入时都会调用它们,以及一个调用发送数据的函数。