前端开发之WebSocket通信

WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信(双向同时通信)的协议,它允许服务器和客户端之间自由地交换数据,无需反复建立连接。其特点包括:

  • 双向通信:实时性强,支持服务器向客户端推送数据,也支持客户端向服务器发送数据。
  • 轻量级数据格式:减少传输开销,提高通信效率。
  • 基于TCP:确保数据传输的可靠性。
  • 无同源限制:可以跨域通信。
  • 协议标识:ws(非加密)或wss(加密)。
  • 兼容性:现代浏览器广泛支持,但老版本浏览器可能需要降级方案。

应用场景:在线聊天、实时游戏、协同编辑等对实时性要求高的场景。

客户端(JavaScript):

var socket = new WebSocket('ws://yourserver.com/socket');
socket.onopen = function() {socket.send('Hello Server!');
};
socket.onmessage = function(event) {console.log('Received:', event.data);
};
socket.onclose = function() {console.log('Connection closed');
};

服务器端(Node.js + ws库):

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {ws.on('message', message => {console.log('Received:', message);ws.send('Hello Client!');});
});
即时通讯的其他实现方式:
1.短轮询
  • 原理:客户端定时向服务器发送请求查询是否有新数据。
  • 优点:实现简单。
  • 缺点:频繁请求造成资源浪费,实时性差。

应用场景:实时性要求不高的简单应用。

setInterval(function() {fetch('/api/data').then(response => response.json()).then(data => console.log('Data:', data));
}, 2000); // 每2秒轮询一次
2.长轮询
  • 原理:客户端发起请求,服务器无新数据则挂起连接,直到有新数据才响应。
  • 优点:相较于短轮询减少请求次数,提升效率。
  • 缺点:服务器端资源占用较高,长时间连接可能导致资源泄露。

应用场景:实时性要求较高,但可以接受一定延迟的场景。

简化版代码如下:

function longPoll() {fetch('/api/longPoll').then(response => response.json()).then(data => {if (data.updated) {console.log('Update:', data);} else {setTimeout(longPoll, 5000); // 无更新,5秒后再次轮询}});
}
longPoll();
3.SSE (Server-Sent Events)

允许服务器向浏览器推送更新,单向通信。

  • 原理:基于HTTP的单向通信,服务器通过事件流向浏览器推送数据。
  • 优点:简单易用,浏览器支持良好(不包括旧版IE)。
  • 缺点:仅支持服务器到客户端的通信,不支持客户端向服务器发送数据。

客户端(JavaScript):

var es = new EventSource('/api/sse');
es.onmessage = function(event) {console.log('Received:', event.data);
};

服务器端(Node.js + Express):

const express = require('express');
const app = express();app.get('/api/sse', (req, res) => {res.setHeader('Content-Type', 'text/event-stream');res.setHeader('Cache-Control', 'no-cache');setInterval(() => {res.write(`data: ${new Date().toISOString()}\n\n`);}, 5000);
});app.listen(3000);

即时通讯的实现:短轮询、长轮询、SSE 和 WebSocket 间的区别?

技术描述特点适用场景
WebSocket基于TCP的全双工通信协议,实现双向实时数据传输。实时性强,双向通信,低延迟,高效率。支持二进制数据。实时交互应用,如在线游戏、即时聊天、协同编辑。
短轮询定时向服务器发送请求检查数据更新。实现简单,资源消耗大,实时性较差。实时性要求不高的场景,需要高度兼容性。
长轮询客户端请求后,服务器无更新则挂起连接,有更新即响应。相较短轮询减少请求次数,提高效率,服务器端资源占用较高。实时性要求较高,可接受短暂延迟的应用。
Server-Sent Events (SSE)服务器单向推送更新至浏览器。浏览器原生支持,实现简单,适合服务器推送数据。仅支持文本数据。实时数据推送,如新闻、股票、实时日志。

性能与兼容性权衡

  • 性能排序(高到低):WebSocket > SSE > 长轮询 > 短轮询
  • 兼容性排序(低到高):WebSocket > SSE > 长轮询 > 短轮询

以上,每种技术都有其适用场景和局限性,开我们需根据实际需求选择最合适的技术方案。WebSocket由于其全双工和低延迟的特性,成为现代实时应用的首选方案,但在考虑兼容性和实现简易性时,短轮询、长轮询和SSE仍有其价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端前端开发遇到过的Andorid和IOS的差异记录

移动端前端开发遇到过的安卓和苹果的差异记录 1. 引入外部资源,最好用https2. IOS时间戳获取NaN问题3. 金额三位分节显示方式4. .webp图片支持问题 1. 引入外部资源,最好用https ios处于安全性的考虑,不大支持http引入外部资源,所…

【kubernetes】探索k8s集群的配置资源(secret和configma)

目录 一、Secret 1.1Secret 有四种类型 1.2Pod 有 3 种方式来使用 secret 1.3应用场景:凭据 1.4创建 Secret 1.4.1用kubectl create secret命令创建Secret 1.4.2内容用 base64 编码,创建Secret 1.4.2.1Base64编码 1.4.2.2创建YAML文件 1.4.2.3…

《计算机网络》

计算题【33】 题目:假设一个有噪声信道的带宽为3KHz,信噪比为30dB,则该信道的最大数据传输速率是多少? C = W log2(1+S/N)(bit/s)=3000Hz* log2(1+30)= 29.9kbps 题目:一个网络中,设定的IP地址范围是:172.88.32.1至172.88.32.254,试确定其合适的子网掩码。 分析第…

「前端+鸿蒙」鸿蒙应用开发预览模拟器运行

在鸿蒙应用开发中,预览和模拟器运行是开发流程中的重要环节,它们允许开发者在不使用实体设备的情况下测试应用的界面和功能。以下是如何使用华为DevEco Studio进行预览和在模拟器上运行鸿蒙应用的详细步骤,以及相应的示例代码。 快速体验-预览…

277 基于MATLAB GUI火灾检测系统

基于MATLAB GUI火灾检测系统,可以实现图片和视频的火苗检测。火焰识别的三个特征:1个颜色特征,2个几何特征颜色特征:HSV颜色空间下,对三个通道值进行阈值滤波,几何特征1:长宽比,几何…

用 Python 撸一个 Web 服务器-第3章:使用 MVC 构建程序

Todo List 程序介绍 我们将要编写的 Todo List 程序包含四个页面,分别是注册页面、登录页面、首页、编辑页面。以下分别为四个页面的截图。 注册页面: 注册 登录页面: 登录 首页: 首页 编辑页面: 编辑 程序页面非…

程序员搞副业一些会用到的工具

微信号采集(爬虫)技术的选型 那么,我们应该使用什么技术来从庞大的网页内容中自动筛选和提取微信号呢?答案就是:数据采集技术,也就是爬虫技术。 然而,数据采集技术种类繁多,我们具体应该采用哪一个呢&…

【Linux】—— 线程控制的基本介绍

目录 (一)POSIX线程库 (二)创建线程 2.1 线程ID及进程地址空间布局 (三)线程终止 (四)分离线程 (一)POSIX线程库 POSIX线程库(POSIX Thread…

Node.js后端构建指南:MongoDB与Express的集成

安装express 安装 Express 并将其保存到依赖列表中: $ cnpm install express --save 以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录。以下几个重要的模块是需要与 express 框架一起安…

nss刷题(4)

1、[SWPUCTF 2021 新生赛]easyrce <?php error_reporting(0); highlight_file(__FILE__); if(isset($_GET[url])) { eval($_GET[url]); } ?> if(isset($_GET[url])) isset函数用来检测url变量是否存在&#xff1b;$_GET函数获取变量数据 eval($_GET[url]); eval函数用…

【GIS矢量切片】tippecanoe在Windows和CentOS中的安装

组件安装记录 背景介绍Windows下安装1、下载工具2、存放安装包3、进入DOS终端4、在终端执行命令5、下载程序6、放置源码7、修改配置信息8、编译9、测试10、参数说明瓦片输出瓦片描述和权属信息输入文件和图层名输入文件的并行处理输入文件的投影缩放级别瓦片分辨率CentOS 7安装…

尝试用 GPT-4o 写 2024高考语文作文

文章目录 新课标I卷科技进步与问题的演变 新课标II卷抵达未知之境&#xff1a;探索与成长的旅程 全国甲卷坦诚交流&#xff1a;构建真正相遇的桥梁 北京卷历久弥新 天津卷定义与自定义&#xff1a;在世界的缤纷中前行 上海卷认可度的思考与反思 新课标I卷 阅读下面的材料&#…

Mongodb---java篇

一、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency> 二、编写配置文件连接Mongodb 我的认证数据库是admin&#xff0c;你们可能不一样 sp…

第三篇——大数据思维的科学基础

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 大数据时代&#xff0c;大数据思维的重要性不言而喻&#xff1b;而信息在…

Elasticsearch搜索优化-自定义路由规划(routing)

在es的实践学习中&#xff0c;我觉得它的文档是最好的老师&#xff0c;所以先把这部分链接贴出来&#xff0c;本文只是引导&#xff0c;文档全是细节&#xff0c;还是推荐大家事后认真看看文档 Metadata fields-routing 在es搜索中&#xff0c;请求是先分发到所有分片&#x…

6月26~28日,2024北京国际消防展即将开幕!

随着社会的快速发展&#xff0c;消防安全日益受到广大民众的高度关注。为了进一步推动消防科技的创新与发展&#xff0c;提升全民消防安全意识&#xff0c;2024年北京消防展将于6月26日在北京国家会议中心盛大开展。目前:观众预登记已全面启动&#xff0c;广大市民和业界人士可…

马尔科夫性质-举例简单说明,马尔科夫模型和隐马尔科夫模型在自然语言处理方面应用是什么

目录 马尔科夫模型应用 马尔科夫性质,举例简单说明 马尔科夫模型 马尔科夫链 马尔科夫决策过程(Markov Decision Process, MDP) 例子 隐马尔科夫模型(Hidden Markov Model, HMM) 马尔科夫模型和隐马尔科夫模型在自然语言处理方面应用是什么 马尔科夫模型在自然语言…

SQLite3(1):介绍安装与测试

目录 1、SQLite3介绍 2、SQLite3的优势和特性 3、SQLite3安装与测试 3.1 SQLite3安装 3.2 SQLite3测试 4、SQLite3简单使用 4.1 连接数据库文件 4.2 创建信息表 4.3 插入三个学生信息 4.4 确认信息 5、总结 1、SQLite3介绍 SQLite3是一种轻量级的关系型数据库管理系…

论文阅读 A Distributional Framework for Data Valuation

本论文解决的问题 量化数据价值&#xff08;机器学习模型训练中各个数据点的贡献&#xff09; 避免数据价值受到其所处数据集的影响&#xff0c;使数据点的估值更加稳定、一致 变量假设 假设 D 表示一个在全集 Z 上的数据分布。对于监督学习问题&#xff0c;我们通常认为 Z…

jvm学习笔记(一) ----- JAVA 内存

JAVA 内存 一、程序计数器二、虚拟机栈三、本地方法栈四、堆五、非JAVA内存(堆外内存)1.元空间(Metaspace)2.直接内存 链接: jvm学习笔记(二) ----- 垃圾回收 链接: jvm学习笔记(三) ----- 垃圾回收器 一、程序计数器 虚拟机需要通过『程序计数器』记录指令执行到哪了。线程要…