segmenfault的消息推送后台是咋做的?我知道前台肯定AJAX
然后我就想知道他的更新策略。
比如是客户端一上线的时候,是客户端到服务器取数据还是服务器判断用户是否上线。一旦上线就推送消息到客户端呢?
然后这些已读消息是不是读过了就从数据库删掉了?是读完了就删掉了还是比如做一个定时任务,比如每天凌晨4点统一删掉已读消息?
这个消息发送模块是一个异步的吗?但是我看见好多消息提醒的开源程序都是同步的。(没有什么异步框架之类的东西,比如wecenter,好像都用的是php,php本身不能异步,这个发消息到底是异步的还是同步的》求解惑!
因为我这一块也是不懂,说起来也是醉了。
大神解惑!
回复内容:
首先我想知道比如说这个离线消息,是存在mysql里面的还是nosql数据库里面的呢?
然后我就想知道他的更新策略。
比如是客户端一上线的时候,是客户端到服务器取数据还是服务器判断用户是否上线。一旦上线就推送消息到客户端呢?
然后这些已读消息是不是读过了就从数据库删掉了?是读完了就删掉了还是比如做一个定时任务,比如每天凌晨4点统一删掉已读消息?
这个消息发送模块是一个异步的吗?但是我看见好多消息提醒的开源程序都是同步的。(没有什么异步框架之类的东西,比如wecenter,好像都用的是php,php本身不能异步,这个发消息到底是异步的还是同步的》求解惑!
因为我这一块也是不懂,说起来也是醉了。
大神解惑!
- 消息可以存在MySQL里面,但是未读的消息序列可以存在NoSQL里面,SF应该是存Redis里面了。
- 没有那么复杂的思路,就是普通的轮训,上线就从服务器上抓,而不是服务器向客户端推。
- 不是,因为你可以从消息中查看到已读消息的。不过SF会清除老数据,也就是说一个账户最多能存300条消息似乎,更早的就会被删掉。删除个消息分分钟的事情而已,我个人感觉没必要用队列。
- 因为是轮询,不是推送,所以你这里谈同步异步似乎没什么意义。如果看你举的例子的话,SF应该是一样的。
最后感觉你把推送和轮询搞混掉了,推送是服务器主动往客户端推消息,轮询是客户端请求服务器然后服务器返回消息。这两个机制是不一样的。如果是推送的话,必然是搞个消息队列让服务器一个一个推比较爽咯。
他不是ajax,是websocket
上一篇: 使用mysqlimport 将格式化文件导入MySQL表
下一篇: PHP autoload机制详解