需求html
使用Bmob iOS SDK中的數據實時功能(http://docs.bmob.cn/ios/developdoc/index.html?menukey=develop_doc&...)完成如下功能:ios
用戶能夠隨意發佈帖子;web
這個用戶的關注者能夠當即接收到這個發佈的帖子信息。網絡
其中第一個需求是很容易實現的,關鍵是第二個需求,須要用到數據實時功能去監聽當前登陸用戶關注的做者是否發送新帖子。post
解決方案學習
方案1.net
接到這個需求,很容易就想到如下方案,我稱之爲表監聽方案,原理以下:設計
表監聽方案
設計的表以下:
記錄用戶信息的表
user(username,password,attention_authors) 其中attention_authors爲用戶的關注者列表orm
記錄帖子信息的表
post(title,content,author)htm
監聽過程:
用戶登陸
監聽post表,每次有更新時,則遍歷當前登陸用戶的關注人列表,判斷最新添加的帖子的做者是否在該列表中,若是存在則推送該帖子給當前登陸用戶,不然,不做處理。
咱們能夠看出,該方案中,只要一但出現有新帖子產生,那麼該應用的全部用戶都會接收到新帖子的信息,只是根據當前用戶是否有關注該帖子的做者來決定是否顯示,那麼假如應用的用戶量一大,天天的新帖子數不少時,那麼每個用戶天天接受這些帖子就須要消耗大量的流量,而顯然,這些流量中的信息絕大一部分是對用戶無用的。所以,咱們須要改變一下監聽策略。
方案2
行監聽方案,原理以下:
設計兩張表:
user(username,password,attention_authors,last_post)
attention_authors 用戶關注的做者的objectId列表,該字段爲Array類型
last_post用戶發的最後一篇帖子的objectId
post(title,content,author)
整個邏輯分爲兩個方面 :
1.發post
更新post表,添加一條數據,並讀取其objectId
更新user表對應author==userName的記錄,將1)中last_post置爲objectId
2.收post
網絡讀取attention_authors字段,監聽User表中的objectId中對應的全部行
當監聽的行有更新時,讀取lastID
利用lastID查找post表對應的行,讀取這些行信息而且主動發現給當前登陸用戶
對比方案1,該方案最大的優勢在於,只有當前登陸用戶關注的做者發表新帖子時,用戶纔會收到更新推送,確保接收的信息對於用戶而言都是有用的。
總結
在移動客戶端的開發過程當中,在設計完方案後,還須要考慮網絡的交互,因爲目前的移動網絡流量仍是比較昂貴的,所以,要儘量地減小網絡數據交互。因爲如今有新的任務,目前只實現了使用行更新的方案,有興趣的朋友能夠嘗試實現表監聽方案來對比一下,若是後面時間充裕的話我也會將這兩種方案進行更加深刻的對比。
代碼下載猛擊這裏
更多學習怒擊這裏