7

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

我想知道与 HTTP 相比,对于 iPhone 的大容量、低延迟网络服务是否是一个合理的解决方案。

我发现的一件值得注意的事情是关于在 iPhone 上运行 Thrift 的错误报告,该错误报告似乎已得到修复。但这并不一定表明它已经完成。

4

5 回答 5

4

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

所以......谁能回答原来的问题?如果没有,我会深入了解 Thrift 包含的 Cocoa 支持,看看它在 iphone 上的工作原理。

于 2010-08-25T02:41:28.793 回答
4

只是我的两分钱..

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

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

我之前曾在 iOS、Android、Windows 和服务器团队上使用 Google Protobuf v2.5 领导过一个拥有 10 毫秒 MAU 的 iOS 团队,我可以证明 IDL 在移动设备上非常棒。Apple 使用它们来同步 iWork 内容。

我目前的团队为 iOS 和 Android 客户端使用 Thrift,主要是 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,除非他们拥有大量资源来编写自己的库。

于 2015-03-02T13:35:33.073 回答
2

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

有一些有用的库可以使通过 HTTP 的 JSON 或 PLIST 通信变得非常容易,并且几十年来调试和理解 HTTP 协议以及如何很好地使用它。我会忽略这一点,后果自负。

于 2009-12-11T21:20:09.397 回答
2

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

于 2011-05-10T16:19:49.323 回答
1

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

于 2010-04-02T05:01:57.527 回答