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

前端常用的服务器推送技术

前端开发中,服务器推送技术允许服务器主动向客户端(浏览器)发送数据,而无需客户端显式请求。这种技术对于构建实时应用(如聊天应用、实时通知、实时数据仪表盘等)非常关键。以下是几种常用的服务器推送技术及其详细介绍和示例代码。

1. 轮询(Polling)

虽然轮询不是真正的服务器推送技术,但它是一种实现实时功能的简单方法。客户端定期向服务器发送请求以检查是否有新数据。

缺点

  • 资源消耗高,因为客户端需要不断发送请求。
  • 实时性差,因为数据更新依赖于轮询的间隔。

示例代码(JavaScript):

function poll() {  
    fetch('/api/data')  
        .then(response => response.json())  
        .then(data => {  
            console.log(data);  
            // 更新UI等操作  
            setTimeout(poll, 5000); // 每5秒轮询一次  
        })  
        .catch(error => console.error('Error:', error));  
}  
  
poll();

2. 长轮询(Long Polling)

长轮询是轮询的改进版,客户端发送一个请求到服务器,服务器保持连接打开,直到有新数据到来或超时,然后服务器响应客户端,客户端再次发起请求。

优点

  • 比标准轮询更高效,因为减少了无用的请求。
  • 实时性相对较好。

缺点

  • 仍然需要多次建立连接。
  • 服务器端需要维护多个打开的连接。

示例代码(通常服务器端实现较为复杂,这里只展示客户端逻辑):

function longPoll() {  
    fetch('/api/data/longpoll')  
        .then(response => response.json())  
        .then(data => {  
            console.log(data);  
            // 更新UI等操作  
            longPoll(); // 立即再次发起请求  
        })  
        .catch(error => {  
            console.error('Error:', error);  
            setTimeout(longPoll, 5000); // 超时重试  
        });  
}  
  
longPoll();

3. Server-Sent Events (SSE)

Server-Sent Events 允许服务器主动向客户端发送事件。一旦客户端和服务器之间的连接建立,服务器就可以随时发送数据到客户端。

优点

  • 真正的服务器到客户端的推送。
  • 建立在HTTP协议之上,兼容性好。
  • 客户端代码相对简单。

缺点

  • IE浏览器不支持。
  • 只能发送文本数据。

示例代码(JavaScript):

if (!!window.EventSource) {  
    const evtSource = new EventSource('/api/data/events');  
  
    evtSource.onmessage = function(e) {  
        const newData = JSON.parse(e.data);  
        console.log(newData);  
        // 更新UI等操作  
    };  
  
    evtSource.onerror = function(e) {  
        console.error('EventSource failed:', e);  
        evtSource.close();  
    };  
} else {  
    console.log("Your browser doesn't support Server-Sent Events");  
}

4. WebSocket

WebSocket 提供了一个全双工的通信渠道,允许服务器和客户端之间的实时双向通信。

优点

  • 真正的全双工通信。
  • 实时性好,延迟低。
  • 数据格式灵活,可以是文本或二进制。

缺点

  • 浏览器和服务器都需要支持WebSocket。
  • 相比HTTP连接,WebSocket连接需要更多的资源。

示例代码(JavaScript):

const socket = new WebSocket('wss://example.com/socketserver');  
  
socket.onopen = function(event) {  
    console.log('Connection established!');  
    // 发送数据到服务器  
    socket.send('Hello Server!');  
};  
  
socket.onmessage = function(event) {  
    const data = JSON.parse(event.data);  
    console.log('Message from server ', data);  
    // 更新UI等操作  
};  
  
socket.onerror = function(error) {  
    console.error('WebSocket Error: ', error);  
};  
  
socket.onclose = function(event) {  
    if (event.wasClean) {  
        console.log('Connection closed cleanly, code=', event.code, ' reason=', event.reason);  
    } else {  
        // e.g., server process killed or network down  
        // event.code is usually 1006 in this case  
        console.error('Connection died');  
    }  
};

以上介绍了前端开发中常用的几种服务器推送技术及其示例代码。根据具体的应用场景和需求,可以选择最适合的技术实现实时功能。


http://www.kler.cn/news/310128.html

相关文章:

  • python 环境问题
  • 828华为云征文|云服务器Flexus X实例|Ubunt部署Vue项目
  • 使用python来保存键盘输入情况,可保存到sqlite3数据库
  • Nginx 负载均衡:优化网站性能与可扩展性的利器
  • 使用rust自制操作系统内核
  • 需要申请 TAC
  • 「C++系列」异常处理
  • Apache Spark — Repartition 与 Coalesce(调整数据集分区)
  • 【软件测试】压力测试的学习总结
  • 作业帮大数据面试题及参考答案
  • Linux shell编程学习笔记81:zcat命令——快速查看压缩文件内容
  • 函数题 6-10 阶乘计算升级版【PAT】
  • IOS 25 实现歌单详情(UITableView)列表 ②
  • 即插即用 | YOLOv8热力图可视化方法详解
  • MySQL的(DDL、DCL、DQL、DML)语言学习
  • 7.7opencv中(基于C++) 翻转图像
  • 完全解决git clone超时和git子模块无法下载问题
  • CSS学习路线
  • 11 vue3之插槽全家桶
  • 【JavaEE】多线程编程引入——认识Thread类
  • mysql怎样优化count(*) from 表名 where …… or ……这种慢sql
  • c++基础入门三
  • Java Web开发中处理Response返回值的技巧与实践
  • 1×1卷积核【super star 卷积核】
  • 【数据结构-线段树】【差分】力扣732. 我的日程安排表 III
  • 基于PHP的丽江旅游管理系统
  • VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025
  • STM32快速复习(十二)FLASH闪存的读写
  • [Meachines] [Medium] Bart Server Monitor+Internal Chat+UA投毒+Winlogon用户密码泄露权限提升
  • MySQL高阶1777-每家商店的产品价格