web中的消息推送和实时通知怎么做

Lucare 发布于 2016/09/06 17:08
阅读 14K+
收藏 1
Web
如题,一般情况下,如何实现web页面上的消息实时通知,比如说我邀请了某人成为项目管理,假如人家正在浏览页面就能收到类似的邀请通知,还有主动推送的公告之类的。
加载中
0
您的好友
您的好友

1. 基于ajax定时普通轮询

2. 基于ajax的长轮询   比第一种好

3. 基于web socket服务端推送  最佳

Lucare
Lucare
那我试试websocket
1
eechen
eechen
实现比较实时的消息通知:
单页面(只在一个页面做轮询)
+ setInterval间隔被动轮询(keep-alive持久连接,比如30秒)
+ window.onfocus窗口获得焦点主动触发(event-driven)
window.onblur  = function() {document.title = '失去焦点';};
window.onfocus = function() {document.title = '获得焦点';};
轮询间隔时间过短,用户打开页面过多,可能会导致服务器压力过大.
对于实时性要求不高的业务,可以把间隔时间加大,比如2分钟轮询1次.

WebSocket需要浏览器支持HTML5,而且服务器端编程难度也要大于HTTP.
而 间隔轮询 + 焦点触发 这些IE6都支持,编程者只需用一个jQuery就能很好地处理AJAX和DOM,服务器端可以用传统的PHP,实现起来难度并不大.

问答社区 https://segmentfault.com/index.php 用的也是"间隔轮询",只不过其并没有使用"焦点触发",
而是用了 HTML5 Page Visibility API 在窗口再次可见时触发AJAX消息查询,实现消息通知.

如果你要用WebSocket,可以看看WorkerMan和峰哥的PHP Swoole:
WorkerMan HTTP WebSocket聊天室Demo:
http://www.workerman.net/applications
http://chat.workerman.net/
http://kedou.workerman.net/

PECL扩展Swoole支持使用PHP来编写高性能的socket应用:
pecl remote-info swoole
http://www.swoole.com
http://git.oschina.net/matyhtf/swoole/blob/master/examples
PHPWebIM是Swoole官方基于PHP Swoole扩展和Swoole Framework开发的WebSocket网页即时聊天工具.
PHPWebIM支持WebSocket+Comet两种协议,可用于所有种类的浏览器包括IE.
https://github.com/matyhtf/PHPWebIM
Demo: http://webim.swoole.com

Lucare
Lucare
回复 @eechen : 不服!
乌龟壳
乌龟壳
回复 @eechen : 我只是为了纠正你对java的错误认识而已,其实你说的大部分PHP的东西我都赞同的,而且你PHP用得比我熟。主要是有些地方太偏激了我才老找你麻烦,哈哈。
eechen
eechen
回复 @乌龟壳 : 所以我提出了简单通用基于HTTP的"间隔轮询"+"焦点触发"呀,JAVAer不服么?
乌龟壳
乌龟壳
这就奇怪了,原来你也知道只要别人没把库给你封装好,用起来也麻烦啊。我还以为你一直认为PHP做事情简单是PHP动态语言的事呢。
0
Lucare
Lucare
不错!
0
a
aboo
用RSS试试
Lucare
Lucare
太抽象了
0
Mr_K
Mr_K

最简单的暴力的 ajax轮训!!不推荐!

稍微好一点点的 webSocket···

Lucare
Lucare
就这两种?
0
netkiller-
netkiller-
推荐websocket
0
我_承宇
我_承宇
用Redis呀,做 pub/sub 就好了嘛
Lucare
Lucare
这个也可以试试,但是前端怎么处理
0
这是用户名
Lucare
Lucare
试试这个
0
Lucare
Lucare
使用websocket我服务端和客户端都能统一,但是用redis的话,具体怎么操作了,前端要轮训吗?
返回顶部
顶部