Server-sent Events(SSE)從前端到後端

阅读时长 3 分钟读完

Server-sent Events(SSE)是一种 Web 技术,允许服务器向客户端发送事件流,传输的内容可以是文本、 JSON 或者 XML 等格式。相对于 WebSocket, SSE 建立连接的流程比较简单,且只需要使用 HTTP 协议即可,使其更具互操作性。

如何建立 SSE 连接

一个 SSE 连接包括两个部分:客户端和服务器。对于服务器端,可以用 Node.js 或者 PHP 来实现;客户端可以使用 HTML5 的 EventSource 对象来接受事件流。以下是 SSE 建立连接的步骤:

服务器端

1.服务器端首先需要判断请求是否为 SSE 请求,可以通过判断请求头的Accept是否为text/event-stream来确定。

2.在确定请求为 SSE 请求后,需要设置响应头,告诉客户端传输的内容是 SSE 事件流。设置的响应头如下:

3.在 SSE 连接中,如果服务器端需要推送事件给客户端,需要使用event:data:id 三个字段来描述事件,具体格式如下:

事件名称可以根据开发者的需要自由定义,数据可以是字符串、JSON、XML 或者纯文本。例如下面的代码实现了向客户端推送一条事件:

4.在 PHP 中如果想保持事件流的持久连接,需要防止 PHP 超时机制,可以在执行该脚本前设置不超时。

客户端

1.打开一个 SSE 连接:

2.监听服务端发送的消息:

SSE 连接的特点

相对于普通的 Ajax 轮询,SSE 连接有以下几个优点:

  1. SSE 连接是单向的,只允许服务器推送消息给客户端,从而减少了网络负载,也不会引起浏览器卡顿等问题。

  2. SSE 连接可以保持长时间的连接,不需要频繁地建立、关闭连接,从而可以大大降低服务器压力。

  3. SSE 连接的实现比较简单,既可以使用 Node.js 来实现,也可以使用 PHP 实现。

适用场景

相对于 WebSocket, SSE 更适合一些特定的场景,例如实时更新金融、体育、天气等信息的网站,以及在线聊天室等场景。

总结

本文介绍了 SSE 技术的基本概念,以及如何构建 SSE 连接。SSE 技术能够实现非常实用的功能,但同时也有其自身的限制,例如只能向客户端推送消息而不能接受客户端的消息等。在实际应用中,开发者需要根据具体的需求选择合适的技术,并充分考虑兼容性和性能等因素。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6461c4d9968c7c53b031de8e

纠错
反馈