当前位置: 首页 > news >正文

Server-Sent Events

Server-Sent Events (SSE) 是一种允许服务器向客户端推送实时更新的技术。

1. 创建 SSE 连接
export default {
  data() {
    return {
      eventSource: null,
    };
  },
  onLoad() {
    this.initSSE();
  },
  methods: {
    initSSE() {
      // 创建 SSE 连接
      this.eventSource = new EventSource('https://api/xxxxx');

      // 监听 message 事件
      this.eventSource.onmessage = (event) => {
        console.log('SSE Message:', event.data);
        // 在这里处理接收到的数据,比如更新页面状态
      };

      // 监听 open 事件(可选)
      this.eventSource.onopen = (event) => {
        console.log('SSE Connection Opened:', event);
      };

      // 监听 error 事件(可选)
      this.eventSource.onerror = (event) => {
        console.error('SSE Error:', event);
        if (this.eventSource.readyState === EventSource.CLOSED) {
          console.log('SSE Connection Closed.');
          // 在这里处理连接关闭的情况,比如尝试重新连接
        }
      };
    },
    beforeDestroy() {
      // 在页面销毁前关闭 SSE 连接
      if (this.eventSource) {
        this.eventSource.close();
      }
    },
  },
};

2. 配置服务器
确保你的服务器端正确配置了 SSE。以下是一个简单的 Node.js 示例

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.url === '/sse-endpoint' && req.method === 'GET') {
    // 设置响应头
    res.writeHead(200, {
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      Connection: 'keep-alive',
    });

    // 发送数据
    const sendData = () => {
      res.write(`data: ${JSON.stringify({ message: 'Hello, SSE!' })}\n\n`);
      // 每5秒发送一次数据
      setTimeout(sendData, 5000);
    };

    sendData();

    // 监听客户端断开连接
    req.on('close', () => {
      res.end();
    });
  } else {
    res.writeHead(404);
    res.end();
  }
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

3. 注意事项

  • 跨域问题:如果你的客户端和服务器不在同一个域下,确保服务器支持 CORS(跨域资源共享)。
  • 网络状态:在移动设备上,网络状态可能不稳定,建议处理重连逻辑。
  • 数据格式:SSE 传输的数据通常是文本格式,你可以在服务器端将其序列化为 JSON 字符串,在客户端再解析回来。

相关文章:

  • 正则表达式(2)匹配规则
  • SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)
  • 【Find My功能科普】防盗黑科技如何改变生活?
  • 提升大模型Text-to-SQL能力应用的实践
  • 人工智能与深度学习的应用案例:从技术原理到实践创新
  • VBA之Word应用第三章第七节:文档Document对象的方法(一)
  • 高效编程指南:PyCharm与DeepSeek的完美结合
  • 2.Swift Tabbar的使用
  • 软考中级_【软件设计师】知识点之【数据库】
  • Llama-Factory框架下的Meta-Llama-3-8B-Instruct模型微调
  • CentOS 最新系统安装 Redis 7.0.11 详细指南
  • 重生之数据结构与算法----数组链表
  • 2025-03-06 学习记录--C/C++-PTA 练习8-8 移动字母
  • Android MXPlayer-v1.86.0-wushidi专业版[原团队最后一个版本]
  • 实战案例分享:Android WLAN Hal层移植(MTK+QCA6696)
  • 编程语言介绍:Rust
  • RK3588V2--HYM8563TS RTC 实时时钟适配移植
  • QTday4
  • 谈谈你对 Seata 的理解?
  • 第四章:go 不同进制的区分 for _, r :=range 使用
  • 网站做关键词库的作用/谷歌网站收录提交入口
  • 建设银行 嘉定 网站/公司软文怎么写
  • 做私服网站需要些什么/嘉兴网络推广
  • 做网站后端需要什么语言/网址查询域名
  • 武汉网站设计制作公司/网盘搜索神器
  • 海外兼职网站建设/百度客服电话人工服务热线