使用Server-Sent Events(简称SSR)来实现服务器推送的方法如下

客户端实现

客户端可以通过EventSource接口来接收来自服务器的事件,以下是常见的实现步骤:

<!DOCTYPE html>
<html>
<head>SSR Demo</title>
</head>
<body>
    <script>
        const eventSource = new EventSource('/events');
        eventSource.onmessage = function(e) {
            // 处理收到的事件数据
            console.log('收到数据:', e.data);
            // 更新页面或其他逻辑
        };
    </script>
</body>
</html>

服务器实现

在服务器端,配置一个路由来返回EventSource响应,以下是使用Node.js Express的示例:

const express = require('express');
const app = express();
// 配置必要的中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 定义路由
app.get('/events', function(req, res) {
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');
    // 创建事件流
    const stream = res.createStream();
    stream.on('data', function(chunk) {
        stream.write(`data: ${chunk}\n`);
    });
    stream.on('finish', function() {
        res.end();
    });
    // 处理客户端的发送数据
    stream.on('connect', function() {
        console.log('客户端连接成功');
    });
    stream.on('close', function() {
        console.log('客户端关闭连接');
        res.end();
    });
    stream.on('error', function(err) {
        console.error('错误:', err);
        res.end();
    });
});
app.listen(300, function() {
    console.log('服务器运行在localhost:300');
});

数据推送

服务器可以通过stream.write方法向客户端推送数据,每次写入时,数据以data: <data>\n的格式发送。

错误处理

在服务器端,处理错误、关闭和连接事件:

stream.on('error', function(err) {
    console.error('错误:', err);
    res.end();
});
stream.on('close', function() {
    console.log('客户端关闭连接');
    res.end();
});

跨域配置

在服务器配置中,允许客户端从不同域名访问:

app.use('events', express.allowCrossDomain);

注意事项

  • 兼容性:SSR广泛支持现代浏览器。
  • 数据格式:数据应以text/event-stream格式发送。
  • 连接管理:确保在客户端或服务器断开时正确释放资源。

通过以上方法,您可以实现服务器对客户端的实时推送,适用于需要单向数据推送的场景,如实时状态更新或动态内容加载。

使用Server-Sent Events(简称SSR)来实现服务器推送的方法如下

扫码添加原子VPN加速器微信

扫码添加原子VPN加速器微信

400-815-7263
扫码添加原子VPN加速器微信

扫码添加原子VPN加速器微信

网站地图