架构学习--推拉消息学习

具体案例学习:

1.系统对单个用户通知

比如微博实现好友计数:

实现不刷新网页,计数实时变化的需求。

如果使用推送:

1.登录微博的时候,先从服务端获取最初的好友数量,getCountByType()

2.一旦有人加了你好友,服务端将好友数量加1,并对网页端进行实时推送


使用拉取:

1.每次用户刷新网页的时候,拉取最新的好友数量

使用cache进行计数存储很大程度提升系统性能


2.系统对多的通知

案例:

1.qq弹窗新闻,需要确保每个登录的用户都能收到信息

假设有一个表存放弹窗新闻,一个表存放用户信息

1.不可以使用推送,如果使用推送的方法,需要记录用户是否收到消息的状态,产生大量的冗余信息

2.在用户登录时,进行弹窗新闻拉取,并记录用户拉取时间,如果拉取时间在新闻发布时间之后,说明已经成功推送了这条新闻,不会进行拉取


2.qq右下角弹窗广告

需要对一批在线用户推送相同的弹窗广告

推送方式:用for循环对消息进行推送,需要注意机器的资源限制使用,进行推送限速控制

拉取方式:利用qq原有的keepalive在请求返回时,告诉它有消息需要拉取,然后拉取广告信息,由于keepalive请求是均匀的,于是广告拉取更加均匀,避免了系统冲击。


3.状态同步推拉方式

好友状态同步,采用推送方式

群友状态同步,由于消息风暴扩散系数过大,一半采用拉取方式

群友状态同步,还能采用按需拉取,一个用户真正进入了群聊才进行状态拉取方式,减轻服务器负担

消息风暴扩散系数一定程度上决定了技术采用推送还是拉取

 from 微信公众号:架构师之路

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,015评论 25 709
  • 公司的项目中有多个界面涉及到业务上报,一个界面内有多个TextView的情况 刚开始写的时候,想找个大神写好的te...
    带你去旅行阅读 966评论 1 0
  • 你说太容易得到的东西不好 别委屈了自己 专八,这一辈子都过不了了 两次机会都用完了 很多东西 正在无声无息地失去着...
    8454a51837ec阅读 168评论 0 0
  • 你沧桑落寞,你猛进高歌 你穿过黑夜,走向繁花世界 你让手伸入云朵,又让脚踏入岩河 直到钢筋水泥变成万家灯火 你屡败...
    熊姥姥阅读 180评论 0 0
  • 焦灼的太阳烘烤着那条柏油路,两旁的小草蔫了地耷拉着头,蝉在声嘶力竭地叫个没完,把那份窒息与焦躁肆意渲染。 无尽头的...
    木桥椿阅读 1,086评论 0 4