网站的消息(通知)系统一般是如何实现的?
1个回答
展开全部
---------------------------
先说消息的发送,这个环节相对简单一些。把消息放到你的信箱里,标记成未读,就OK了,读了之后,再标记成已读,或者是不想读,直接忽略。
我们的浏览器或者是客户端,定期的去服务器上的信箱看看,有消息就提示,用户想看就再展示消息全文,没有消息就默不作声。
在知乎,每个问题,每个回答,每个用户,每一条已经做出的评论,都可以看作是一个实体,当这个实体发生了变化,比如
被回答,被评论,回答,赞同,被赞同的时候,就产生一个事件,这个事件就会产生一个或者多个消息,把消息放到实体的关注者的信箱中就OK了。
上面说是事件,而不是消息,是因为事件和消息还多少有些不同。
比如
我关注的一个人回答了我关注的一个问题,这是两个事件,但发送消息的时候,或许有一条消息来描述比较好一些,所以每一个事件都还要有属性,用来合并或者去重。
而我关注的问题被多个人回答,应该会产生多条消息,那么平铺会占用版面,消息就再合并成消息,变成一条,然后给一个隐藏了部分细节的消息,发送出去。
再比如,一个问题被人评论,是一个操作,但可能对于不同的人发出不同的消息,比如:我的问题被评论
VS
我被人@
了。
---------------------------
再说说消息的产生,有一种是及时产生的,一发生变化,就立刻产生事件。这样的方式需要前期做足够好的设计。因为及时产生,对系统造成的压力可能不太容易控制,比如晚上8、9点钟,泡知乎的人比较多,产生的事件就多,而工作时间可能就清闲一些。另外,一个变化可能会因为需求的发展而需要产生不同的事件,就要提早考虑好,能够快速的升级,把新的事件加入进去。
一般来说,能拿得到台面上的系统都这种方式。
当然,也不是说这种方法就不好,要看场景是否合适。
事件-》消息-》看到通知,里面的多个环节,都可能不是同步的。
先说消息的发送,这个环节相对简单一些。把消息放到你的信箱里,标记成未读,就OK了,读了之后,再标记成已读,或者是不想读,直接忽略。
我们的浏览器或者是客户端,定期的去服务器上的信箱看看,有消息就提示,用户想看就再展示消息全文,没有消息就默不作声。
在知乎,每个问题,每个回答,每个用户,每一条已经做出的评论,都可以看作是一个实体,当这个实体发生了变化,比如
被回答,被评论,回答,赞同,被赞同的时候,就产生一个事件,这个事件就会产生一个或者多个消息,把消息放到实体的关注者的信箱中就OK了。
上面说是事件,而不是消息,是因为事件和消息还多少有些不同。
比如
我关注的一个人回答了我关注的一个问题,这是两个事件,但发送消息的时候,或许有一条消息来描述比较好一些,所以每一个事件都还要有属性,用来合并或者去重。
而我关注的问题被多个人回答,应该会产生多条消息,那么平铺会占用版面,消息就再合并成消息,变成一条,然后给一个隐藏了部分细节的消息,发送出去。
再比如,一个问题被人评论,是一个操作,但可能对于不同的人发出不同的消息,比如:我的问题被评论
VS
我被人@
了。
---------------------------
再说说消息的产生,有一种是及时产生的,一发生变化,就立刻产生事件。这样的方式需要前期做足够好的设计。因为及时产生,对系统造成的压力可能不太容易控制,比如晚上8、9点钟,泡知乎的人比较多,产生的事件就多,而工作时间可能就清闲一些。另外,一个变化可能会因为需求的发展而需要产生不同的事件,就要提早考虑好,能够快速的升级,把新的事件加入进去。
一般来说,能拿得到台面上的系统都这种方式。
当然,也不是说这种方法就不好,要看场景是否合适。
事件-》消息-》看到通知,里面的多个环节,都可能不是同步的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询