Server-Sent Events入门

摘要:
前言SSE是一种服务器消息推送技术,是HTML5标准协议的一部分。它类似于WebSocket,但不同的是WebSocket可以双向通信。SSE只能从服务器向浏览器发送消息。Spring对SSE@GetMappingpublicSseEmittertest()的支持引发IOException{SseEmitter();SseEventBuilderbuilder=SseEmirate.event().name.i.data;emitter.send;emitter.complete();returnemitter;}该方法的返回值是从ResponseBodyEmitter继承的SseEmitter。Spring MVC提供了ResponseBodyEmitterReturnValueHandler类来处理此类型。请参阅Server SentEvents教程。服务器SentEvents协议详细信息和服务器端推送技术的实现。ServerSentEvents快速解释Spring5ServerSentEvent(I)

前言

SSE(Server-Sent Events)是一种服务器消息推送技术,是HTML5标准协议中的一部分,类似WebSocket,不同在于WebSocket可以双向通信,SSE只能服务器向浏览器发送消息。具体的规范可以查看 MDN

简单使用

客户端,注意IE浏览器可能不支持

<script>
    // 初始化, 参数为url
    // 依赖H5
    var sse = new EventSource("test");

    sse.onmessage = function (e) {
        console.log("message", e.data, e);
    };
    // 监听指定事件, (就不会进入onmessage了)
    sse.addEventListener("me", function (e) {
        console.log("me event", e.data);
    });
</script>

服务器端,指定响应的 content-type 为 text/event-stream

@GetMapping(value = "/test", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
  public void test(HttpServletResponse response) throws IOException {
    response.setContentType("text/event-stream");
    response.setCharacterEncoding("utf-8");
    // 指定事件标识
    response.getWriter().write("event:me
");
    // ID
    response.getWriter().write("id:" + UUID.randomUUID().toString() + "
");
    // 格式: data: + 数据 + 2个回车
    response.getWriter().write("data:hello eventsource" + "

");
    response.getWriter().flush();
  }

服务器连接中断,客户端会自动重连,默认超时重连时间为3秒。

Server-Sent Events入门第1张

Spring对SSE的支持

@GetMapping(value = "/test", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
  public SseEmitter test() throws IOException {
    SseEmitter emitter = new SseEmitter();
    SseEventBuilder builder = SseEmitter.event()
        .name("me")
        .id(UUID.randomUUID().toString())
        .data("hello eventsource2");
    emitter.send(builder);
    emitter.complete();
    return emitter;
  }

方法返回值为SseEmitter,继承于ResponseBodyEmitter,SpringMVC中提供了ResponseBodyEmitterReturnValueHandler类来处理这种类型。

Server-Sent Events入门第2张

SpringBootAdmin(一个管理和监控SpringBoot应用的框架) 源码中就使用到了SSE。

Server-Sent Events入门第3张

Server-Sent Events入门第4张

参考

Server-Sent Events 教程
Server-Sent Events 的协议细节和实现
服务端推送技术 Server-sent Events 快速上手
详解Spring 5 Server-Sent Events(一) 基本介绍

免责声明:文章转载自《Server-Sent Events入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇十九、React UI框架Antd(Ant Design)的使用——及react Antd的使用 button组件 Icon组件 Layout组件 DatePicker日期组件Docker安装各种服务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

软件需求分析—消息管理

软件简介:该软件主要为大学生提供一个寻找丢失物品的平台,帮助丢失物品者或者捡到物品者找到相应的物品或者失主。 N(need)需求:对于这样一个寻找丢失物品的平台,对于后台数据库消息的管理是非常重要的,要将丢失物品者和捡到物品者的消息有条理的保存,并且要对垃圾消息及时的处理。 A(approach)做法:消息管理主要体现在后台的数据库的管理上,实现上应该在用...

MQTT 主题的高级特性

什么是主题MQTT 协议通过网络传输应用消息。应用消息通过 MQTT 传输时,它们有关联的服务质量(QoS)和主题(Topic)。主题本质上是一个字符串,MQTT 协议规定主题是 UTF-8 编码的字符串,这意味着,主题过滤器和主题名的比较可以通过比较编码后的 UTF-8 字节或解码后的 Unicode 字符。 主题名和主题过滤器主题名附加在应用消息上的一...

子线程更新UI界面的2种方法

一、一般我们都会在子线程完成一些耗时的操作。 1、Android中消息机制: 2、知识点: Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message m...

MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论。 背景 MQTT是IBM开发的一个即时通讯协议。MQTT构建于TCP/IP协议上,面向M2M和物联网IoT的连接协议,采用轻量级发布和订阅消息传输机制。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支...

android的几种“通知”方式简单实现(Notification&amp;amp;NotificationManager)

  关于通知Notification相信大家都不陌生了,平时上QQ的时候有消息来了或者有收到了短信,手机顶部就会显示有新消息什么的,就类似这种。今天就稍微记录下几种Notification的用法。3.0以前的通知和3.0以后的通知是有些区别的。话不多说,直接上代码。   1、新建一个android项目     我新建项目的 minSdkVersion="1...

RabbitMQ 运转流程

生产者发送消息 1、生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel) 2、生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等 3、生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等 4、生产者通过路由键将交换器和队列绑定起来 5、生产者发送消息至 Ra...