关于一个消息提醒的功能实现,请各位 V2Exer 帮忙解释一下

2014-08-01 17:13:34 +08:00
 xiparos
可能问题有些低级,但是我实在没做过这方面的功能实现,还恳请各位高手轻喷。

问题一:拿知乎举个栗子,(也可以是非死不可):用户登录后,只要自己关注的人有新状态发布,(A回答了B的问题,C创建了一个问题。。)等等一类的消息,在用户栏上的实时提醒是如何做到的?

PS: 刚才问了一个朋友说是通过AJAX定期向数据库发送GET请求,以抓取最新的更新信息,想了想也对,实现原理应该是这样的,不知道各位大牛有啥更好的实现方案。

问题二:如果我想用PHP来实现这样的功能的话,有没有什么现成的框架或者插件能够实现这样的功能,还是说可以在框架的基础上自己写一个类似的消息推送功能?

问题三:如果问题一里面的实现方案成立的话,是不是在建表的时候,需要有一个用户状态的表,比如叫user_status,专门用来插入每一条用户的更新(update)或者用户的动作(action),然后前台写一个AJAX,通过RESTful API对这个表的数据进行抓取,显示到前台。

不知道上面的问题表述是否清楚,如果说的不够详细的话请多包涵,我也会尽量在跟贴里解释清楚,谢谢大家。
3861 次点击
所在节点    问与答
17 条回复
zzNucker
2014-08-01 17:25:17 +08:00
comet / push /persistent connection
arbipher
2014-08-01 17:32:15 +08:00
你想知道有没有人给打你电话?
一种方式是定期看手机有没有来电提示(通过AJAX定期向数据库发送GET请求),
另一种更直观的方法是,听电话铃有没有响(不要笑……),你的耳朵时时刻刻在做这个工作。
你的耳朵和电话之间建立起“长连接”,“铃声”就是电话通过这个长连接推送给你的“消息”,你收到“消息”后再去看手机,到底是谁来电,是接电话还是装死。。。
简单的长连接可以通过WebSocket实现,其实这个问题之前我也是在v2ex问的(http://v2ex.com/t/103113#reply3)
xiparos
2014-08-01 17:40:03 +08:00
@arbipher
@zzNucker
多谢两位的精准信息,

请问@arbipher tornado.websocket可以用在PHP框架下么?看了一下是用python写的
arbipher
2014-08-01 17:46:53 +08:00
@xiparos
websocket是一种协议,什么语言都有自己的实现。
PHP我不熟悉,建议你等PHP大神的回复
xiparos
2014-08-01 17:48:34 +08:00
@arbipher 好的,谢谢你
em70
2014-08-01 17:55:59 +08:00
消息数据库加个已读标记字段,默认为0,定期监听未读消息,发现有未读就推送给用户,阅读后修改标记为1

网页消息只能定期监听,没其他办法
cloudzhou
2014-08-01 17:57:22 +08:00
如果要求及时性不那么高,简单的 ajax 按照时间轮讯就可以了,比如每一分钟。
最好使用类似 redis 来做这种状态的保存。
hcy
2014-08-01 18:04:09 +08:00
简单地消息提醒还是用Server-sent Events这个好点。这个用php实现起来很简单.
不过只支持html5
https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
xiparos
2014-08-01 18:23:35 +08:00
刚才看了一下这个:
http://stackoverflow.com/questions/603201/using-comet-with-php
感觉PHP语言本身对于Comet的支持就不是很好,只能作为client端开发用。server端的话还得用Python,Nodejs这样的语言来实现Comet或者Websocket。
xiparos
2014-08-01 18:40:42 +08:00
@hcy 好的,我看一下,谢谢
raincious
2014-08-01 18:43:29 +08:00
https://www.v2ex.com/t/119720

我这是Ajax轮询实现的。

WebSocket的话建议直接写一台通讯服务器,不然负担不小。
xiparos
2014-08-01 19:05:31 +08:00
@raincious 非常感谢提供这么好的思路啊!
alvin2ye
2014-08-01 21:32:07 +08:00
Jelen
2014-08-01 22:43:00 +08:00
xiparos
2014-08-01 23:59:59 +08:00
@Jelen 谢谢,这个刚刚有在看
xiparos
2014-08-06 21:29:14 +08:00
@raincious 你好,有什么方法可以联系你,想请教关于PHP上消息提醒实现的一些问题。
raincious
2014-08-06 21:55:49 +08:00
@xiparos 你就这里问呗,可能我不知道的别人也知道呢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX