2009-12-11 45 views
7

是否有人在iPhone應用程序中完成或看到Apache Thrift的部署?在iPhone上使用Apache Thrift取得任何成功?

我想知道如果是一個高容量的合理的解決方案,適用於iPhone低(更低)-latency網絡服務相比,HTTP。我發現

一個值得注意的事情是一個bug report關於iPhone的,這似乎已經固定的運行節儉。但是,這並不一定表明這是一筆交易。

回答

3

我一直不喜歡使用構建服務器和客戶端代碼的通用接口定義的框架。它將雙方保持一致,實際上服務器API更改必須在與之通信的客戶端版本中非常靈活。

有非常有用的庫,使JSON或PLIST通信通過HTTP很容易,和幾十年的調試和理解HTTP協議以及如何使用它做好的。我會無視你的危險。

+0

謝謝,肯德爾。我同意你的風險!我正在考慮提出一個新問題:何時以及爲什麼要從HTTP移開?對我而言,付出的代價是陡峭的。 但是,對於一個成功的iPhone應用程序來說,接近一百萬用戶,可能值得向後彎腰,以獲得更快的速度和更低的延遲。 (我很懷疑,大多數iPhone應用程序都是數據驅動的;序列化不是問題;延遲無法幫助。)但我想知道更廣泛的社區的感受。 – JasonSmith 2009-12-12 03:06:05

+0

具體來說,我正在考慮使用UDP上的二進制序列化來處理來自諸如位置信息等手機的頻繁,非關鍵更新。我仍然不被說服,但我願意接受。 – JasonSmith 2009-12-12 03:08:07

+0

現在,這聽起來像是一種很好的用法,否則可能不那麼容易。我立場糾正。 – 2009-12-14 04:24:53

1

作爲外部API的節儉並不合理。在內部使用它搖滾。

4

Thrift和HTTP並不相互排斥。事實上,現在節儉運輸工具使用HTTP傳輸實施。這也是一個非常好的自動生成服務器/客戶端代碼的方式,可以避免大量編組/封裝樣板,同時仍然非常快速。它的內部表示基本上是二進制JSON,因此它與REST風格的Web服務非常相似(除了更易於編寫代碼以及更快)之外。

那麼......任何人都可以回答原來的問題?如果不是的話,我會用節儉包含的可可支持自己潛入,並看看它是如何在iphone上運行的。

+0

太棒了,感謝您的更新! – JasonSmith 2010-08-25 08:44:24

2

我已經用幾百萬用戶的大型iPhone應用程序的節儉的客觀c綁定。作爲提到的海報之一,我們可以使用Http來獲得兩全其美的效果。但是沒有用於節儉的異步HTTP客戶端。我們必須構建一個基於事件的包裝來允許非阻塞的I/O調用。底層仍然一次發出一個調用,這大大地影響了我們,因爲我們有一個服務器調用需要很長時間,但它不會阻塞UI流,另一個調用阻止UI流的非常快。如果基礎層忙於慢速命令,我們的快速命令只能等待。我正在嘗試在C++中構建asyc http,然後可以在iPhone上使用這些http,但是這種方法已經準備就緒。

4

只是我的兩分錢..

接受的回答這個問題,一種意見爲不使用的技術,而不是它是否是可能的答案。

節儉,是一個接口定義語言,IDL,像的Protobuf和Capt'n'Proto。它們允許定義與平臺無關的客戶端/服務器/服務器協議。 JSON和Plist不提供相同級別的一致性。

之前曾領導一個團隊的iOS與10ms的MAU使用在iOS,安卓,Windows和服務器團隊谷歌的Protobuf V2.5,我可以證明,的IDL是在移動很大。 Apple使用它們來同步iWork內容。

我目前的團隊使用節儉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,除非他們有足夠的資源來編寫自己的庫。

+0

你對於接受的答案的觀點是有效的。 (雖然它本身是一個元討論,而不是關於Thrift本身的答案。)注意,在Stack Overflow政策/指南有關答案清晰且衆所周知之前,我在五年前接受了答案。 – JasonSmith 2015-03-03 10:12:44

+0

@JasonSmith沒有接受答案。我注意到這個問題很古老。但是,SO應該試圖保持它的內容是最新的,這就是爲什麼我添加了我自己的兩美分:) – 2015-03-03 10:14:24