温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么实现spring mvc SSE服务端发送事件

发布时间:2021-11-16 17:47:14 来源:亿速云 阅读:194 作者:iii 栏目:大数据

这篇文章主要讲解了“怎么实现spring mvc SSE服务端发送事件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现spring mvc SSE服务端发送事件”吧!

需要新式浏览器支持

服务端:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

import static java.util.concurrent.TimeUnit.SECONDS;

@RestController
public class SSEController {

    /**
     * 每5秒向浏览器发送消息
     * 媒体类型必须为:text/event-stream
     * 输出的格式:
     * <pre>
     * :这是注释 单独一个冒号,代表服务器推送的一个注释。(这个可解决http中的324,发送心跳包)
     * id:11 代表数据标识符,客户端接收到消息后,会把这个 ID 作为内部属性 Last-Event-ID,在断开重连 成功后,会把 Last-Event-ID 发送给服务器。
     * data:我是谁 这个数据就是客户端所接受到的数据(可推送格式化过的json数据),客户端会把这个字段解析为字符串,如果一条消息有多个 data 字段,客户端会自动用换行符 连接成一个字符串。
     * event:myEvent 客户端收到消息时,会在当前的 EventSource 对象上触发一个事件,这个事件的名称就是这个字段的值,如果消息没有这个字段,客户端的 EventSource 对象就会触发默认的 message 事件。
     * retry:3000 客户端在http超时断开后多长时间重新连接 ,只接受整数,单位是毫秒。如果这个值不是整数则会被自动忽略。
     * </pre>
     *
     * @author Canaan
     * @date 2019/8/28 23:15
     */
    @RequestMapping(value = "sse_push", produces = "text/event-stream")
    public String push() throws InterruptedException {
        SECONDS.sleep(5);
        String msg = "当前时间为-" + LocalDateTime.now().toString();
        return String.format("data:%s\n\n", msg);
    }

}

客户端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>

<script type="text/javascript">
    if (!!window.EventSource) {

        var source = new EventSource("/demo/sse_push");
        source.addEventListener("message", function (e) {
            //data:服务器端传回的数据
            //origin: 服务器端URL的域名部分,即协议、域名和端口。
            //lastEventId:数据的编号,由服务器端发送。如果没有编号,这个属性为空。
            console.info(e.data);
        });

        source.addEventListener("open", function (e) {
            // console.info("连接打开");
        }, false);

        source.addEventListener("error", function (e) {
            if (e.readyState === EventSource.CLOSED) {
                console.info("连接关闭");
                return;
            }
            console.info(e);
        }, false);

    } else {
        alert("你的浏览器不支持 SSE");
    }

</script>
</html>

感谢各位的阅读,以上就是“怎么实现spring mvc SSE服务端发送事件”的内容了,经过本文的学习后,相信大家对怎么实现spring mvc SSE服务端发送事件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI