即时通讯技术一直都是web端的痛点,早期有轮询方案,但是很消耗性能,而且安全性极低,不推荐使用。后面推出了Websocket,确实不错,但开发成本和难度都不低。还有一种不错的方案就是SSE (Server-sent Events),他是介于轮询和Websocket之间,是 WebSocket 的一种轻量代替方案。这种方案能够以一种比WebSocket更加方便、快捷、稳定、开发成本低的方式,将数据实时推送到web浏览器和其他的HTTP客户端。
那么Mercure是一种高级协议,基于SSE构建,并且增加了很多内置功能,如果你使用webSocket,可能要自己实现。
下面来看看Mercure的工作原理:
服务器推送POST数据到Mercure,Mercure在将数据以SSE方式,推送到各个应用客户端。
Symfony为了方便为我们提供了一个MercureBundle,能够让我们轻松的在Symfony中使用Mercure来推送数据。