EventSource
是客户端针对 SSE
提供的接口。
基础使用方式为(下文中 EventSource
实例均以 source
替代):
js
const source = new EventSource(url, [options])
其中:
url
表示后端服务路径;options
可设置参数如下:withCredentials
表示CORS
是否携带Cookie
。
1.实例属性
1-1.readyState
readyState
表示连接状态。
具有以下几种值:
0
连接中1
连接成功2
连接失败
1-2.url
url
表示后端服务路径。
1-3.withCredentials
withCredentials
表示 CORS
是否携带 Cookie
。
2.实例方法
2-1.close()
close()
方法用以关闭 SSE
连接。
当该方法被调用时,SSE
的 readyState
值会变化为 2
。
js
source.close()
3.事件监听
3-1.open
open
事件用以监听 SSE
连接的建立。
js
source.addEventListener('open', () => {
console.log('Event source open...')
})
3-2.message
message
事件用以监听 SSE
连接的信息传输。
js
source.addEventListener('message', () => {
console.log('Event source message...')
})
3-3.error
error
事件用以监听 SSE
连接的出错。
js
source.addEventListener('error', () => {
console.log('Event source error...')
})
TIP
express
中的 res.send()
方法会中断 SSE
连接,从而触发 error
事件监听。
3-4.自定义事件
除了以上 3
种的内置事件,我们也可以自定义实例监听事件。
只要保证 Server
端定义对应 event
字段触发即可。
譬如:
js
source.addEventListener('foo', () => {
console.log('Event source foo...')
})
TIP
只能使用 addEventListener
进行监听。
source.onfoo = () => {}
形式的监听不会工作。
server
端使用 express
如下:
js
const data = { message: 'Message from foo.' }
res.write(`event: 'foo'\ndata:${JSON.stringify(data)}\n\n`)