javascript - 如何实现新消息通知?
黄舟
黄舟 2017-04-11 11:14:40
[JavaScript讨论组]

例如,希望实现有新消息通知用户,目前想到的方法是,settimeout去不断发起ajax向后端请求数据

这种方案有什么弊端吗?

或者有什么更好的方案?可以由服务器push给浏览器?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(11)
高洛峰

之前也在处理这个问题,如果只要新消息通知的话,可以用 SSE(Server-sent Events)推送。
相比使用WebSocket要方便很多,在服务端无需太多操作,很简单的就能加上功能。WebSocket是双向的,SSE是单向的,对于推送消息足够了。
对于旧的ajax轮询方式,SSE协议省了很多不必要的冗余数据。
兼容性上,如果要顾及IE,得针对性处理一下。

可以看看这篇文章,底下也附带了很多相关资料 https://my.oschina.net/jb2011...

服务器推送事件(Server-sent Events),简称SSE,是 HTML 5 规范中的一个组成部分,可以用来从服务端实时推送数据到浏览器端。相对于与之类似的 COMET 和 WebSocket 技术来说,服务器推送事件的使用更简单,对服务器端的改动也比较小。对于某些类型的应用来说,服务器推送事件是最佳的选择。

PHPz

ajax 时间间隔太短 轮循会对服务端造成很大的压力,时间间隔太长,消息通知不及时。

最好用websocket 就是专门做这种事情的啊

ringa_lee

嗯 ajax确实很费服务器 所以用websocket
看看这篇文章:
websocket

天蓬老师

如果用的http协议,通过ajax不断向后台询问没什么问题。

PHP中文网

1、AJAX定时,但达不到及时
2、服务端推送,多了就慢要花钱...
3、用楼上说的WebSocket吧,长监听,emit/on

大家讲道理

setTimeout是最笨的方法,开销大,而且可能一直做无用功。
前段时间我们做了个类似的功能,用的是socket.io,服务器是node。

PHPz

用workerman做过

PHP中文网

用第三方来做就好了,没有必要自己搭建后端。看这篇文章【Pusher 提供websocket的广播服务】

  1. 实时推送采用websocket

  2. ajax 效率太低

怪我咯

websocket

PHP中文网

长连接吗?走的什么协议? 你补充一下场景,现在太笼统了,方案很多的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号