Discourse/Stack Exchange如何实现无需授权的动态通知?
当有人回复时,我会收到一条站内动态通知:
但我从来不需要授权Chrome的弹窗通知:
因此我认为Discourse/Stack Exchange并未使用通知API或推送API,且它们应该不会采用轮询这种原始方式。那么现代网站如何在无需用户授权Chrome弹窗的情况下实现这类通知?
站内实时通知的实现方案
这类站内通知和浏览器系统弹窗通知完全是两回事——它们属于页面内部的交互更新,不需要调用浏览器的系统通知能力,自然也就绕开了授权流程,核心实现方式主要有两种:
WebSocket长连接
这是Discourse、Stack Exchange这类平台的主流方案。网站加载完成后,浏览器会和服务器建立一条持续的双向连接,一旦有新回复、点赞等事件产生,服务器会主动把通知数据推送到浏览器,浏览器收到后直接更新页面上的通知角标、消息列表等区域,全程在页面内部完成,不会触发任何系统级的授权请求。Server-Sent Events(SSE)
这是一种更轻量的单向推送方案,服务器可以主动向浏览器发送事件数据,浏览器通过EventSourceAPI接收这些数据,随后更新站内通知。相比WebSocket,SSE的实现成本更低,适合只需要服务器单向推送通知的场景,同样不需要用户授权。
除此之外,这类方案还支持后台标签页的静默更新:就算你把网站标签页放在后台,浏览器也会维持连接,服务器推送的通知会更新页面标题的角标或者导航栏的通知数字,当你切换回标签页时就能立刻看到新消息,体验和前台一致。
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐



