在iPhone上使用Apache Thrift是否成功?

时间:2009-12-11 18:06:24

标签: iphone thrift

有没有人在iPhone应用中完成或看到Apache Thrift的部署?

我想知道与HTTP相比,对于iPhone的高容量,低(呃)长度网络服务来说是否是一个合理的解决方案。

我发现一个值得注意的事情是关于在iPhone上运行Thrift的bug report,似乎已经修复了。但这并不一定表明这是一个完成的交易。

5 个答案:

答案 0 :(得分:4)

Thrift和HTTP不是互斥的。事实上,thrift现在提供了一个HTTP传输实现。它也是一种自动生成服务器/客户端代码的非常好的方法,它避免了大量的编组/解组样板,同时仍然非常快。它的内部表示基本上是二进制JSON,因此它与RESTful Web服务非常相似(除了更容易编码和更快,更快)。

所以......有人能够回答原来的问题吗?如果没有,我将自己深入了解包含Cocoa支持的节俭,看看它是如何在iphone上运行的。

答案 1 :(得分:4)

只是我的两分钱..

这个问题的公认答案是不使用技术的意见,而不是是否可能的答案。

Thrift,是一种界面定义语言,IDL,如Protobuf和Capt' Proto。它们允许定义与平台无关的客户端/服务器/服务器协议。 JSON和Plist不提供相同级别的类型一致性。

以前在iOS,Android,Windows和服务器团队中使用Google Protobuf v2.5带领拥有10M MAU的iOS团队,我可以证明IDL在移动设备上很棒。 Apple使用它们来同步iWork内容。

我目前的团队使用Thrift for iOS和Android客户端,主要是Scala后端。我更喜欢Protobuf。

我们通过HTTPS和WebSockets发送Thrift有效负载。一旦您(在Thrift中)定义了我们的有线通信协议(即帧结构),就可以很容易地发展您的API。

但是,特别是在iOS上存在一些实现问题。该库的当前版本包装非常糟糕,如果您希望制作一个Objective-C框架(例如iOS 8+),那么您将无法使用v0.9.2开箱即用。这是因为库标题包含本地导入(#import "TProtocol.h"而不是#import <Thrift/TProtocol.h>),没有伞标题。最糟糕的是,Objective-C编译器生成非常混乱的Objective-C类,还包括来自Thrift库的本地导入。

其中一些问题非常严重。它向我表明,虽然使用IDL是一个很好的工程决策,但是很少有iOS团队使用Thrift,除非他们使用资源来编写自己的库。

答案 2 :(得分:3)

我一直不喜欢使用通用接口定义构建服务器和客户端代码的框架。它使双方保持同步,实际上服务器API的变化必须在与之通信的客户端版本中非常灵活。

有一些有用的库可以很容易地通过HTTP进行JSON或PLIST通信,并且需要数十年的调试和理解HTTP协议以及如何正确使用它。我会忽视你的危险。

答案 3 :(得分:2)

我已经将thrift的目标c绑定用于拥有数百万用户的大型iPhone应用程序。作为提到的海报之一,我们可以使用Http,它可以获得两全其美的效果。但是没有用于thrift的异步HTTP客户端。我们必须构建一个基于事件的包装器,以允许非阻塞I / O调用。底层仍然会一次发出一个调用,因为我们有一个服务器调用需要很长时间,但它不会阻止UI流,而另一个真正快速阻止UI流。如果底层使用慢速命令,我们的快速命令就必须等待。我正在尝试在c ++中构建asyc http,然后可以在iPhone上使用,但这已经没有准备好了。

答案 4 :(得分:1)

作为外部API的Thrift没有意义。在内部使用它摇滚。