使用Bmob SDK实时数据功能的一次经历

需求html

使用Bmob iOS SDK中的数据实时功能(http://docs.bmob.cn/ios/developdoc/index.html?menukey=develop_doc&...)完成如下功能:ios

  1. 用户能够随意发布帖子;
  2. 这个用户的关注者能够当即接收到这个发布的帖子信息。

其中第一个需求是很容易实现的,关键是第二个需求,须要用到数据实时功能去监听当前登陆用户关注的做者是否发送新帖子。网络

解决方案post

  • 方案1

接到这个需求,很容易就想到如下方案,我称之为表监听方案,原理以下:.net

表监听方案
设计的表以下:
记录用户信息的表
user(username,password,attention_authors) 其中attention_authors为用户的关注者列表设计

记录帖子信息的表
post(title,content,author)code

监听过程:htm

  1. 用户登陆
  2. 监听post表,每次有更新时,则遍历当前登陆用户的关注人列表,判断最新添加的帖子的做者是否在该列表中,若是存在则推送该帖子给当前登陆用户,不然,不做处理。

咱们能够看出,该方案中,只要一但出现有新帖子产生,那么该应用的全部用户都会接收到新帖子的信息,只是根据当前用户是否有关注该帖子的做者来决定是否显示,那么假如应用的用户量一大,天天的新帖子数不少时,那么每个用户天天接受这些帖子就须要消耗大量的流量,而显然,这些流量中的信息绝大一部分是对用户无用的。所以,咱们须要改变一下监听策略。pdo

  • 方案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,该方案最大的优势在于,只有当前登陆用户关注的做者发表新帖子时,用户才会收到更新推送,确保接收的信息对于用户而言都是有用的。

总结
在移动客户端的开发过程当中,在设计完方案后,还须要考虑网络的交互,因为目前的移动网络流量仍是比较昂贵的,所以,要尽量地减小网络数据交互。因为如今有新的任务,目前只实现了使用行更新的方案,有兴趣的朋友能够尝试实现表监听方案来对比一下,若是后面时间充裕的话我也会将这两种方案进行更加深刻的对比。

代码连接:[http://download.csdn.net/detail/linmaofuyuanzhang/8528065][2]
相关文章
相关标签/搜索