SSE(服务器推送事件)规范

这篇具有很好参考价值的文章主要介绍了SSE(服务器推送事件)规范。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SSE 是指 "Server-Sent Events",即服务器推送事件。它是一种基于 HTTP 的服务器推送技术,允许服务器实时向客户端推送数据。SSE 规范定义了一种在客户端和服务器之间单向实时通信的方式,通常用于实现服务器向客户端推送更新、通知或实时数据。

使用 SSE,客户端可以通过简单的 JavaScript 代码监听来自服务器的事件流,从而实现实时更新,而无需轮询服务器或使用复杂的 WebSocket 协议。SSE 通常用于实现实时性要求不高、但需要实时更新的应用场景,比如股票市场更新、即时通讯等。

SSE 规范定义了一些特定的 HTTP 头部和事件格式,以及客户端和服务器之间的通信方式,从而实现了简单而高效的服务器推送功能。

以下是一个符合 SSE 规范的简单请求示例:

GET /events HTTP/1.1
Host: example.com
Accept: text/event-stream
Cache-Control: no-cache
Connection: keep-alive

在这个示例中,客户端向服务器发送了一个 GET 请求,请求的资源路径是 "/events"。请求头中包含了 "Accept: text/event-stream",表示客户端希最接收服务器推送的事件流。另外,还设置了 "Cache-Control: no-cache" 和 "Connection: keep-alive" 头部,以确保不缓存响应并保持长连接。

服务器在收到这个请求后,可以使用类似下面的响应来向客户端推送事件:

HTTP/1.1 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive

data: Hello, world!

data: This is a second message.

在这个响应中,服务器使用 "Content-Type: text/event-stream" 表示响应是一个 SSE 事件流。接着使用 "data" 字段来发送事件数据,每个事件以 "data:" 开头,后面跟着事件的内容。客户端收到这样的响应后,就可以解析其中的事件数据并进行相应的处理。

这就是一个简单的符合 SSE 规范的请求和响应示例。

客户端

在客户端,您可以使用 JavaScript 来处理服务器推送的 SSE 事件流。以下是一个简单的示例代码,演示了如何使用 JavaScript 来接收和处理 SSE 事件流:

const eventSource = new EventSource('/events');

eventSource.onopen = function(event) {
  console.log('Connection opened.');
};

eventSource.onmessage = function(event) {
  const eventData = JSON.parse(event.data);
  console.log('Received event data:', eventData);
  // 在这里可以对接收到的事件数据进行处理
};

eventSource.onerror = function(event) {
  if (event.eventPhase === EventSource.CLOSED) {
    console.log('Connection was closed.');
  } else {
    console.error('Error occurred:', event);
  }
};

在这个示例中,我们首先创建了一个新的 EventSource 对象,指定了服务器端的事件流路径 "/events"。然后我们定义了三个事件处理函数:

  1. onopen 事件处理函数在连接建立时被调用,这里我们简单地输出一条日志。
  2. onmessage 事件处理函数在接收到新的事件数据时被调用,我们在这里解析并处理接收到的事件数据。
  3. onerror 事件处理函数在发生错误时被调用,我们在这里输出错误信息。

通过这些事件处理函数,我们可以实现对服务器推送的事件流的监听和处理。当服务器向客户端推送事件时,onmessage 事件处理函数会被调用,从而实现了实时更新和处理。

服务端

在 Java 中,您可以使用 Servlet 来处理 SSE 请求并向客户端推送事件。以下是一个简单的示例代码,演示了如何在服务端使用 Java Servlet 来处理 SSE 请求并向客户端推送至少两次事件:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EventSourceServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/event-stream");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Cache-Control", "no-cache");
        
        PrintWriter out = response.getWriter();
        
        // 第一次推送事件
        out.write("data: First event\n\n");
        out.flush();
        
        // 模拟延迟
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        // 第二次推送事件
        out.write("data: Second event\n\n");
        out.flush();
    }
}

在这个示例中,我们创建了一个名为 EventSourceServlet 的 Servlet 类,覆盖了 doGet 方法来处理 GET 请求。在该方法中,我们首先设置了响应的内容类型为 "text/event-stream",并且禁用了缓存。然后我们获取了输出流,并向客户端推送了两次事件,每次事件之间模拟了一个 2 秒的延迟。

通过这个示例,您可以在 Java 中实现一个简单的 SSE 服务端,并向客户端推送至少两次事件。当客户端发起 GET 请求时,服务器会向客户端推送事件流,客户端可以通过前面提供的 JavaScript 代码来接收和处理这些事件。文章来源地址https://www.toymoban.com/news/detail-801177.html

到了这里,关于SSE(服务器推送事件)规范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SSE与WebSocket分别实现服务器发送消息通知(Golang、Gin)

    服务端推送,也称为消息推送或通知推送,是一种允许应用服务器主动将信息发送到客户端的能力,为客户端提供了实时的信息更新和通知,增强了用户体验。 服务端推送的背景与需求主要基于以下几个诉求: 实时通知:在很多情况下,用户期望实时接收到应用的通知,如

    2024年02月03日
    浏览(37)
  • SpringBoot SSE服务端主动推送事件详解

    SSE(Server Sent Event),直译为服务器发送事件,也就是服务器主动发送事件,客户端可以获取到服务器发送的事件。 我们常见的 http 交互方式是客户端发起请求,服务端响应,然后一次请求完毕。但是在SSE的使用场景下,客户端发起请求,然后建立SEE连接一直保持,服务端就可

    2024年02月07日
    浏览(27)
  • ChatGPT API SSE(服务器推送技术)和 Fetch 请求 Accept: text/event-stream 标头案例

    实战代码github代码:chatgpt-google-extension 该代码以Chrome 插件的实用案例讲解了 fetch-sse 的用法,之前这个技术被用得很少,大家基本上都直接用 websocket 了 谷歌插件:chatgpt-google-extension 简述下 SSE 是一个什么技术?以及怎么进行调用 fetch() 和 EventSource 都是用于实现服务器推送

    2024年02月11日
    浏览(28)
  • html5学习笔记19-SSE服务器发送事件(Server-Sent Events)

    https://www.runoob.com/html/html5-serversentevents.html 允许网页获得来自服务器的更新。类似设置回调函数。 demo_sse.php demo_sse.aspx

    2024年02月09日
    浏览(35)
  • 详解如何通过SSE实现Web站内消息推送

    Web站内消息推送主要是通过WebSocket技术实现的,但是在某些情况下,WebSocket并不是最好的选择,比如在防火墙严格的环境下,WebSocket可能会被阻拦。 为了解决这个问题,我们可以使用SSE技术(Server-Sent Events)。 SSE是一种轻量级的服务器推送技术,可以实现服务器向客户端单

    2024年02月16日
    浏览(31)
  • Server side event (SSE)实现消息推送功能

     在开发web项目时,有一个需求是: 后端服务器 要 主动地 、 不断地 推送消息给 客户端网页 。要实现该需求,需要先考虑几个常用的技术方案: 在客户端网页用 fetch 、 XmlHttpRequest 发送请求是 行不通 的,因为这类请求在后端返回一次数据之后就会中断连接,导致后端无法

    2024年02月06日
    浏览(33)
  • 前端实现消息推送、即时通信、SSE、WebSocket、http简介

    服务端主动向客户端推送消息,使客户端能够即时接收到信息。 场景 页面接收到点赞,消息提醒 聊天功能 弹幕功能 实时更新数据功能 短轮询 浏览器(客户端)每隔一段时间向服务器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。 本质:客

    2024年02月16日
    浏览(31)
  • Springboot集成SSE实现消息推送之单工通信

    通常在一些web项目中,会涉及到想客户端推送消息,常见的有Ajax轮询、webSocket,本篇文章主要使用Springboot集成SSE实现向客户端持续推送信息。 服务发送事件SSE(Sever-Sent Event),就是基于 HTTP 的技术,浏览器向服务器发送一个保持长连接HTTP请求,服务器单向地向客户端以流形

    2024年01月17日
    浏览(36)
  • SSE实现消息实时推送,前端渐进式学习、实践,真香

    SSE(Server Sent Event),直译为服务器发送事件,顾名思义,也就是客户端可以获取到服务器发送的事件。我们常见的 http 交互方式是客户端发起请求,服务端响应,然后一次请求完毕;但是在 sse 的场景下,客户端发起请求,连接一直保持,服务端有数据就可以返回数据给客户端

    2024年02月21日
    浏览(34)
  • 如果让你实现实时消息推送你会用什么技术?轮询、websocket还是sse

    在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如_数据大屏的实时数据_,比如_消息中心的未读消息_,比如_聊天功能_等等。 本文主要介绍SSE的使用场景和如何使用SSE。 学习就完事了 我们常规实现这些需求的方案有以下三种 轮询 websock

    2024年03月19日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包