searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

SSE简介

2024-06-11 08:55:28
14
0

SSE是Server-Sent Events的缩写,是一种由服务器向浏览器发送实时更新的技术。SSE允许服务器主动推送数据到客户端,而不是客户端定期向服务器请求数据。使用SSE可以实现例如实时聊天、通知、直播更新等应用场景。

SSE的主要特点

  1. 单向通信​:SSE是服务器向客户端的单向通信,客户端不能直接通过SSE向服务器发送消息。
  2. 文本数据流​:SSE传输的主要是文本数据(通常是JSON格式),不适合二进制数据。
  3. 自动重连​:SSE具有自动重连机制,当连接中断时,浏览器会自动尝试重新连接。
  4. 事件分发​:SSE支持自定义事件类型,可以在数据流中发送不同类型的事件。

实现方式

在HTML5中,使用JavaScript可以很方便地实现SSE。以下是一个简单的例子:

服务器端(例如使用Node.js):

const http = require('http');

http.createServer((req, res) => {
  if (req.headers.accept && req.headers.accept === 'text/event-stream') {
    res.writeHead(200, {
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      'Connection': 'keep-alive'
    });

    setInterval(() => {
      res.write('data: ' + new Date().toLocaleTimeString() + '\n\n');
    }, 1000);
  } else {
    res.writeHead(404);
    res.end();
  }
}).listen(3000, () => {
  console.log('SSE server running on port 3000');
});

客户端(HTML):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>SSE Example</title>
</head>
<body>
  <h1>Server-Sent Events Example</h1>
  <div id="result"></div>

  <script>
    if (typeof(EventSource) !== "undefined") {
      const source = new EventSource('此处填入服务器地址');

      source.onmessage = function(event) {
        document.getElementById("result").innerHTML += event.data + "<br>";
      };
    } else {
      document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
    }
  </script>
</body>
</html>

在这个例子中,服务器每秒钟向客户端发送一次当前时间,客户端收到数据后将其显示在网页上。

优缺点

优点:

  • 实时性强:适合需要实时数据更新的场景。
  • 简单易用:API简单,容易实现。

缺点:

  • 单向通信:仅支持服务器向客户端推送数据,客户端无法直接向服务器发送消息。
  • 兼容性:部分旧浏览器不支持SSE。
  • 性能:对于大量客户端连接的场景,可能需要优化服务器的性能。

总之,SSE是一种轻量级、易于实现的实时数据推送技术,适用于多种实时应用场景。

0条评论
作者已关闭评论
hzy
3文章数
0粉丝数
hzy
3 文章 | 0 粉丝
hzy
3文章数
0粉丝数
hzy
3 文章 | 0 粉丝
原创

SSE简介

2024-06-11 08:55:28
14
0

SSE是Server-Sent Events的缩写,是一种由服务器向浏览器发送实时更新的技术。SSE允许服务器主动推送数据到客户端,而不是客户端定期向服务器请求数据。使用SSE可以实现例如实时聊天、通知、直播更新等应用场景。

SSE的主要特点

  1. 单向通信​:SSE是服务器向客户端的单向通信,客户端不能直接通过SSE向服务器发送消息。
  2. 文本数据流​:SSE传输的主要是文本数据(通常是JSON格式),不适合二进制数据。
  3. 自动重连​:SSE具有自动重连机制,当连接中断时,浏览器会自动尝试重新连接。
  4. 事件分发​:SSE支持自定义事件类型,可以在数据流中发送不同类型的事件。

实现方式

在HTML5中,使用JavaScript可以很方便地实现SSE。以下是一个简单的例子:

服务器端(例如使用Node.js):

const http = require('http');

http.createServer((req, res) => {
  if (req.headers.accept && req.headers.accept === 'text/event-stream') {
    res.writeHead(200, {
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      'Connection': 'keep-alive'
    });

    setInterval(() => {
      res.write('data: ' + new Date().toLocaleTimeString() + '\n\n');
    }, 1000);
  } else {
    res.writeHead(404);
    res.end();
  }
}).listen(3000, () => {
  console.log('SSE server running on port 3000');
});

客户端(HTML):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>SSE Example</title>
</head>
<body>
  <h1>Server-Sent Events Example</h1>
  <div id="result"></div>

  <script>
    if (typeof(EventSource) !== "undefined") {
      const source = new EventSource('此处填入服务器地址');

      source.onmessage = function(event) {
        document.getElementById("result").innerHTML += event.data + "<br>";
      };
    } else {
      document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
    }
  </script>
</body>
</html>

在这个例子中,服务器每秒钟向客户端发送一次当前时间,客户端收到数据后将其显示在网页上。

优缺点

优点:

  • 实时性强:适合需要实时数据更新的场景。
  • 简单易用:API简单,容易实现。

缺点:

  • 单向通信:仅支持服务器向客户端推送数据,客户端无法直接向服务器发送消息。
  • 兼容性:部分旧浏览器不支持SSE。
  • 性能:对于大量客户端连接的场景,可能需要优化服务器的性能。

总之,SSE是一种轻量级、易于实现的实时数据推送技术,适用于多种实时应用场景。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0