1
nybux 2014-09-20 17:28:21 +08:00
|
2
NetCobra 2014-09-20 17:29:28 +08:00 via Android
不知道你用的是什么语言,我们公司的产品中用的是SignalR实现的这个功能,但这个只适用于ASP.Net,你可以看看有没有其他类似的方案。
|
3
eslizn 2014-09-20 17:41:41 +08:00
没这么复杂吧,就是一张消息表,用户每次去取属于自己的消息就可以了,取完标记一下或者redis直接pop
|
4
zzlettle 2014-09-20 17:56:36 +08:00
我设计我的论坛的时候,查过,这种消息通知的数据库模型,设计一般有3种
针对的是小型,中型,大型数据。 你去查查吧。 反正我觉得写这个很绕,可能我学的不够好。所以你看V2EX没有会员间的私信功能。这个功能看起来简单,做起来感觉还有麻烦,主要是数据库里面的查询。 我最后也只做出来一个会员之间的私信来往。那种全部会员通知的,还有针对一定特点会员的群私信的,我都还没做。 真的做起来才感觉绕来绕去的。可能是我没经验吧。你只要把几个数据模型设计好了,数据库查询条件搞清楚了,就没问题了。 我是用django开发的,感觉没有用到celery啊。 |
5
zzlettle 2014-09-20 18:01:58 +08:00
我猜想你用celery的原因是不是因为你的数据很小,你想如果是群体全部用户发私信,就被每个用户消息队列后台添加?
如果你有100万用户你怎么搞? 这个思路只适用很小的用户群。正确的做法是,你做2个数据模型。一个是消息本身内容的,每个人只要一登陆,先去查询有没有新的私信,有的话,就取到自己的数据库里面,标记为已经获取了私信。 所以你用celery的做法是错误的。 |
6
zeayes 2014-09-20 18:09:58 +08:00
消息获取的方式无非有2种:PUSH和PULL。具体可以看下微博的设计。
|
7
gamexg 2014-09-20 19:24:48 +08:00
会存一条消息到redis中的消息队列中,那我该如何将这条消息分发给关注这个用户的所有用户?
每个用户有一个字段,内容是[关注自己的用户列表]。用户有更新时也是推送到消息队列,后台进程取[关注当前用户列表],然后挨个向消息表里面加,同时修改未读消息数量。 |
8
willwen 2014-09-20 19:34:44 +08:00 via iPhone
一個自增量作為消息的id,以Hash message:id作為消息的容器,id推進Set messages,同時推進Set user_id:messages。
這樣可以全局可查,獨立用戶可查,消息狀態控制Set messages即可。 完畢 |