EventSource结合SpringBoot使用
金蝶云社区-云社区用户D3466603
云社区用户D3466603
10人赞赏了该文章 2,596次浏览 未经作者许可,禁止转载编辑于2018年11月22日 20:30:11
summary-icon摘要由AI智能服务提供

本文介绍了Web API中的EventSource接口,它用于建立服务器到客户端的单向事件连接。通过EventSource实例,可以接收服务器发送的文本流格式的事件,并处理这些事件,如显示消息或处理错误。文章还提供了EventSource的构造函数、属性、事件处理程序和方法,并给出了使用JavaScript和Spring Boot实现简单服务器发送事件的示例代码。

来源:https://blog.csdn.net/fengyekafei/article/details/81387073

2018年08月03日 14:39:33 咖啡GIS 阅读数:162更多

个人分类: Java

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengyekafei/article/details/81387073

https://developer.mozilla.org/en-US/docs/Web/API/EventSource

EventSource接口是web内容的接口服务器发送的事件。一个EventSource实例打开一个持久连接HTTP服务器,它发送事件text/event-stream格式。连接保持打开状态,直到通过呼叫关闭EventSource.close()

打开连接后,来自服务器的传入消息将以message事件的形式传递给您的代码。

WebSockets不同,服务器发送的事件是单向的; 也就是说,数据消息是从一个方向传递的,从服务器传送到客户端(例如用户的Web浏览器)。当没有必要以消息形式从客户端向服务器发送数据时,这使它们成为一个很好的选择。例如,EventSource处理诸如社交媒体状态更新,新闻订阅或将数据传递到客户端存储机制(如IndexedDBWeb存储)之类的内容是一种有用的方法。

构造函数

EventSource(url)

创建一个新的EventSource来处理从指定URL接收服务器发送的事件。

属性

此接口还从其父级继承属性EventTarget

EventSource.readyState 只读

表示连接状态的数字。可能的值为CONNECTING0),OPEN1)或CLOSED2)。

EventSource.url 只读

DOMString代表源的URL。

EventSource.withCredentials 只读

Boolean指示EventSource对象是否使用跨源(CORS)凭据set(true)实例化(或者false是默认值)。

事件处理程序

EventSource.onerror

是一种EventHandler发生错误时,被叫error事件分派的上EventSource对象。

EventSource.onmessage

EventHandlermessage收到事件时调用的,即当消息来自源时。

EventSource.onopen

EventHandler当被称为open是接收到的事件,当连接刚刚打开的是。

方法

此接口还从其父级继承方法EventTarget

EventSource.close()

关闭连接(如果有),并将readyState属性设置为CLOSED。如果连接已关闭,则该方法不执行任何操作。

实例

<script>if (typeof(EventSource) !== "undefined") {var eventSource = new EventSource("/mes");eventSource.addEventListener('message', function (event) {document.getElementById("result").innerHTML += event.data + "<br />";});eventSource.addEventListener('error', function (event) {console.log("错误:" + event);});eventSource.addEventListener('open', function (event) {console.log("建立连接:" + event);});}else {document.getElementById("result").innerHTML = "抱歉,您的浏览器不支持 server-sent 事件 ...";}</script>
@RestControllerpublic class DemoController {@GetMapping("/mes")public String getMessage() {double num = Math.floor(Math.random() * 10);int time = 3;// 如果能被3整除输出消息if (num % time == 0) {// 默认chrome 3秒 刷一次 可以在返回的 data 前 加上 retry:1000\n 自定义刷新时间return "retry:1000\ndata:" + new Date().toString() + "\n\n";}return "";}}


图标赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!