目前,除了一些特別簡單非聯網類應用(比如計算器、鬧鐘等),幾乎所有的應用均是聯網應用(比如新聞客戶端,微信等等),這些 app 客戶端基本都只是負責用戶的交互與數據收集與展示,真正的數據和服務均存儲在云端。
那移動端究竟如何和后臺來交換數據并展示呢?我們打個比喻,其實整個過程跟去燒烤店兒擼串一樣一樣的。
拿任意一個新聞客戶端舉例,當用戶刷新的那一刻(你萌生了吃燒烤的想法),客戶端開始組織數據請求(你開始穿衣洗臉打扮,并思考該去哪一家吃呢),當用戶界面開始展示 loading 的時候(這個時候你正走在 “馬大姐燒烤店” 的路上),經過幾百毫秒的時間,這個時候請求數據已經到了服務器(你已經坐在了馬大姐燒烤店的桌子上),服務器開始查看客戶端想要請求哪方面的數據,是請求財經頻道的,還是請求汽車頻道的數據(服務員遞來了菜單,問你想吃啥),服務器看懂了客戶端的想法開始準備數據(你點了 20 個肉串,10 個大腰子),服務器看到你請求的是汽車頻道和財經頻道的數據(光著膀子的烤串師傅開始烤這 20 個串和 10 個大腰子),并給回到服務員,服務員一路小跑,將你要的串和腰子遞到你的面前,這個時候相當于數據已經傳回到了客戶端,客戶端 loading 消失,你看到了最新的兩個頻道的數據。
那客戶端和服務器之間傳輸數據的格式是怎么樣的呢?
現在流行的做法通常有兩種,一種是類似于 PB(Protocol Buffer,Google 定義的一個數據傳輸協議,以簡潔,省流,易用出名)的二進制數據(二進制數據的意思就是你打開這個文件你只能看到 0 和 1 組成的數字串,是沒辦法和你生活中任何認識的字母聯系在一起的)傳輸,這種格式的好處是包小,重復的字段會被節省。另一種是 JSON(JavaScriptObject Notation),這也是一種輕量級的數據傳輸格式,就是用一堆中括號把數據組織起來,不像二進制,這種格式是人可讀的,并且比較輕巧,所以也有大量的應用場景。下面這段數據就是 JSON 格式,簡單解讀一下,就是 people 對應了三個人,三個人分別是中括號間的三個花括號中的人。
總結起來,十分簡單,移動端提出需求,服務器按要求組織好數據發給你,針對不同的格式,移動端自己解析,展示,完活兒。其實,不止移動端,前端網頁和后臺,后臺和后臺之間也是這個道理。至于在傳輸的過程中都經歷了什么,我們找機會再細聊。