当前位置:   article > 正文

前端SSE技术及简单应用_前端处理 sse协议

前端处理 sse协议

server send event简称sse,也就是我们所说的sse技术。是es5提出的一种基于http协议的服务器推送技术。与websocket类似,与服务器构建通道后,服务器可以实时主动向客户端发送信息。且sse本身只能支持Get请求,如果需要post请求的场景,可以引入或安装第三方组件解决。

比如可以通过fetch的方式完成post相关操作。开源组件:GitHub - Azure/fetch-event-source: A better API for making Event Source requests, with all the features of fetch()

特点:

  • 单向通道:sse是单向通道协议,只能通过服务器向客户端发送信息。

  • 长连接:通过向服务器发送请求,在响应头中声明Content-Type:text/event-stream向服务器说明这是一个长链接,发送的是流数据。

  • 实时性:与websocket相同,客户端可以通过sse实时接收服务器发送的信息,可以应用于需要实时更新数据的应用场景。

兼容性:(取自 Can I use... Support tables for HTML5, CSS3, etc

基本上能看出,除了IE浏览器,其他浏览器基本都可以支持-_-||

代码:

  1. // Get请求
  2. const sse = new EventSource('http://xxxxxxxxx');
  3. // SSE只能监听预定义事件,无法监听自定义事件。
  4. // 开启
  5. sse.onopen = (ev) => {
  6. // 可以在当前事件中监听通道开启,同时通道构建失败时,也可以通过当前事件监听到,比如http码报错。
  7. console.log(ev.data);
  8. };
  9. // 更新
  10. sse.onmessage = (ev) => {
  11. console.log(ev.data);
  12. };
  13. // 关闭
  14. sse.onclose = (ev) => {
  15. console.log(ev.data);
  16. };
  17. // 错误
  18. sse.onerror = (ev) => {
  19. console.log(ev.data);
  20. };
  1. // 运用第三方开源组件实现post请求
  2. import { fetchEventSource } from '@microsoft/fetch-event-source';
  3. const ctrlAbout: any = ref(null);
  4. fetchEventSource('http://xxxxxxxxxxx', {
  5. method: 'POST',
  6. headers: {
  7. 'Content-Type': 'application/json',
  8. Accept: 'text/event-stream',
  9. ...
  10. },
  11. signal: ctrlAbout.value.signal,
  12. body: JSON.stringify({
  13. id: '1',
  14. text: '这是发送的信息'
  15. }),
  16. async onopen(eva: any) {
  17. console.log('开启', eva);
  18. // 可以判断token是否过期
  19. if (eva.status === 401 || eva.status === xxx) {
  20. console.log('用户信息过期,请重新登陆!');
  21. }
  22. },
  23. onmessage(eva: any) {
  24. console.log('更新', eva);
  25. },
  26. onclose() {
  27. console.log('断开');
  28. },
  29. onerror(err: any) {
  30. console.log('错误', err);
  31. }
  32. });
  33. // 关闭sse
  34. function close() {
  35. ctrlAbout.value.abort();
  36. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/335443
推荐阅读
相关标签
  

闽ICP备14008679号