如何实现新消息通知?

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

这种方案有什么弊端吗?

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

阅读 8.3k
11 个回答

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

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

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

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

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

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

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

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

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

用workerman做过

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

使用ajax很消耗资源,webscoket就能完美解决问题!不过要针对一些特殊浏览器做特殊处理,比如ie8以下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题