Heim  >  Artikel  >  Backend-Entwicklung  >  segmenfault的消息推送后台是咋做的?我知道前台肯定AJAX

segmenfault的消息推送后台是咋做的?我知道前台肯定AJAX

WBOY
WBOYOriginal
2016-06-06 20:43:171122Durchsuche

首先我想知道比如说这个离线消息,是存在mysql里面的还是nosql数据库里面的呢?
然后我就想知道他的更新策略。
比如是客户端一上线的时候,是客户端到服务器取数据还是服务器判断用户是否上线。一旦上线就推送消息到客户端呢?

然后这些已读消息是不是读过了就从数据库删掉了?是读完了就删掉了还是比如做一个定时任务,比如每天凌晨4点统一删掉已读消息?
这个消息发送模块是一个异步的吗?但是我看见好多消息提醒的开源程序都是同步的。(没有什么异步框架之类的东西,比如wecenter,好像都用的是php,php本身不能异步,这个发消息到底是异步的还是同步的》求解惑!
因为我这一块也是不懂,说起来也是醉了。
大神解惑!

回复内容:

首先我想知道比如说这个离线消息,是存在mysql里面的还是nosql数据库里面的呢?
然后我就想知道他的更新策略。
比如是客户端一上线的时候,是客户端到服务器取数据还是服务器判断用户是否上线。一旦上线就推送消息到客户端呢?

然后这些已读消息是不是读过了就从数据库删掉了?是读完了就删掉了还是比如做一个定时任务,比如每天凌晨4点统一删掉已读消息?
这个消息发送模块是一个异步的吗?但是我看见好多消息提醒的开源程序都是同步的。(没有什么异步框架之类的东西,比如wecenter,好像都用的是php,php本身不能异步,这个发消息到底是异步的还是同步的》求解惑!
因为我这一块也是不懂,说起来也是醉了。
大神解惑!

  1. 消息可以存在MySQL里面,但是未读的消息序列可以存在NoSQL里面,SF应该是存Redis里面了。
  2. 没有那么复杂的思路,就是普通的轮训,上线就从服务器上抓,而不是服务器向客户端推。
  3. 不是,因为你可以从消息中查看到已读消息的。不过SF会清除老数据,也就是说一个账户最多能存300条消息似乎,更早的就会被删掉。删除个消息分分钟的事情而已,我个人感觉没必要用队列。
  4. 因为是轮询,不是推送,所以你这里谈同步异步似乎没什么意义。如果看你举的例子的话,SF应该是一样的。

最后感觉你把推送和轮询搞混掉了,推送是服务器主动往客户端推消息,轮询是客户端请求服务器然后服务器返回消息。这两个机制是不一样的。如果是推送的话,必然是搞个消息队列让服务器一个一个推比较爽咯。

他不是ajax,是websocket

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn