什么是websockret连接

什么是WebSocket

WebSocket,是一种网络传输协议,位于 OSI 模型的应用层。可在单个 TCP 连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅 客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输.

WebSocket 协议在2008年诞生,2011年成为国际标准。现在所有浏览器都已经支持了。

WebSocket 与 HTTP的区别

WebSocket 的最大特点就是长连接,而且服务器和客户端可以互相发送信息。

HTTP 是短连接, 只能由客户端向服务端发起, HTTP为了添加长连接的功能, 有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个 HTTP 请求合并为一个,但是本质上就是客户端一次发多个请求,然后服务端慢慢返回多个response, 这不呢能称的上是长连接.

WebSocket的使用示例

下面是一个简单的使用 WebSocket 的示例:

客户端代码(JavaScript):

const socket = new WebSocket('ws://localhost:8080');// 连接成功时的回调函数
socket.onopen = function () {console.log('WebSocket 连接成功');
};// 接收到消息时的回调函数
socket.onmessage = function (event) {const message = event.data;console.log('接收到消息:', message);
};// 连接关闭时的回调函数
socket.onclose = function () {console.log('WebSocket 连接关闭');
};// 发送消息给服务器
function sendMessage(message) {if (socket.readyState === WebSocket.OPEN) {socket.send(message);} else {console.error('WebSocket 连接未打开');}
}

服务器端代码(Node.js,使用 ws 库):

const WebSocket = require('ws');const wss = new WebSocket.Server({ port: 8080 });wss.on('connection', function (ws) {console.log('有新的 WebSocket 连接');// 接收客户端消息ws.on('message', function (message) {console.log('收到客户端消息:', message);// 广播消息给所有连接的客户端wss.clients.forEach(function (client) {if (client.readyState === WebSocket.OPEN) {client.send(message);}});});// 连接关闭时的回调函数ws.on('close', function () {console.log('WebSocket 连接关闭');});// 发生错误时的回调函数ws.on('error', function (error) {console.error('WebSocket 错误:', error);});
});

上述代码创建了一个 WebSocket 客户端和一个 WebSocket 服务器。客户端通过实例化 WebSocket 对象并指定服务器的 URL 来连接到服务器。服务器使用 WebSocket 库创建一个 WebSocket 服务器,并监听连接、接收消息、广播消息等事件。

你可以根据需要修改代码以适应你的应用场景。

WebSocket 的适用场景

WebSocket 在以下情况下特别适用:

实时聊天应用:WebSocket 可以提供实时的双向通信,使得聊天应用能够实时地传递消息并更新聊天界面。
实时数据更新:如果你的应用需要实时地获取数据更新,例如股票市场行情、实时地图数据等,WebSocket 可以提供一种高效的方式来获取并传递这些实时数据。
多人协作应用:对于多人协作的应用,如实时编辑文档、白板协作等,WebSocket 可以实现实时同步和协作,让多个用户能够同时编辑和观察到最新的变化。
游戏应用:WebSocket 提供了实时双向通信的能力,使得游戏应用可以实现实时的游戏状态更新、多人游戏对战等功能。
总之,任何需要实时通信和即时更新的应用场景都可以考虑使用 WebSocket。

WebSocket 的优点

实时性:WebSocket 提供实时双向通信,能够实现实时的数据传输和更新,无需轮询或定时刷新页面。

效率高:WebSocket 使用持久连接,减少了每个请求的开销,并且通过数据帧的方式传输数据,减少了数据的开销。

可扩展性:WebSocket 可以扩展到支持大量的并发连接,适用于高并发的实时应用场景。

简化开发:WebSocket 提供了简单易用的 API,使得开发者能够轻松地实现实时通信功能。

跨平台支持:WebSocket 可以在各种平台上运行,包括 Web 浏览器、移动设备和服务器端。

WebSocket 的缺点

浏览器兼容性:旧版本的浏览器可能不支持 WebSocket,因此在考虑使用 WebSocket 时,需要考虑兼容性问题,并提供替代方案。

长连接维护:WebSocket 使用长连接,需要维护连接状态,这可能增加服务器的负载,并占用客户端和服务器的资源。

安全性问题:WebSocket 允许实时双向通信,因此需要确保在应用中采取必要的安全措施,防止恶意攻击或滥用。

需要服务器支持:WebSocket 需要服务器端实现 WebSocket 协议,因此需要在服务器端进行额外的配置或使用支持 WebSocket 的服务器框架。

总结:

综上所述,WebSocket 提供了一种强大的实时通信解决方案,适用于实时聊天、实时数据更新、多人协作和游戏等应用场景。然而,开发者需要在兼容性、长连接维护、安全性和服务器支持等方面进行综合考虑,并根据应用的需求选择合适的通信方案。
————————————————
版权声明:本文为CSDN博主「前端每日三省」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42560424/article/details/131380857

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

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

相关文章

OpenCV(二十):图像卷积

1.图像卷积原理 图像卷积是一种在图像上应用卷积核的操作。卷积核是一个小的窗口矩阵,它通过在图像上滑动并与图像的像素进行逐元素相乘,然后求和来计算新图像中每个像素的值。通过滑动卷积核并在图像上进行逐像素运算,可以实现一系列图像处理…

(笔记七)利用opencv进行形态学操作

(1)程序清单 形态学操作是一种图像处理技术,它基于数学形态学理论,用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。 #!/usr/bin/env python # -*- coding:utf-8 -*- """ author: LIFEI t…

Vue生成多文件pdf准考证

这是渲染的数据 这是生成的pdf文件,直接可以打印 需要安装和npm依赖和引入封装的pdf.js文件 npm install --save html2canvas // 页面转图片 npm install jspdf --save // 图片转pdfpdf.js文件 import html2canvas from "html2canvas"; import jsPDF …

SpringMVC框架@RequestMapping用法,处理器方法参数接收,处理器方法返回值详解

1. RequestMapping 定义请求规则 1.1 指定模块名称 通过RequestMapping 注解可以定义处理器对于请求的映射规则。该注解可以注解在方 法上,也可以注解在类上,但意义是不同的。value 属性值常以“/”开始。RequestMapping 的 value 属性用于定义所匹配请…

C语言 语法积累

参考博文: c语言中int默认是有符号还是无符号,C语言迷题:有符号数与无符号数的问题_旋斡勃人的博客-CSDN博客前些天偶然看到了一个收集C语言迷题的网站,很是感兴趣。本人对C/C语言本身很是感兴趣,曾经做过几年相应的开发&#xf…

【Redis专题】Redis核心数据结构实战与高性能原理解析

目录 前言课程内容一、redis数据类型1.1 字符串(string)类型:比较简单的一种使用存储模型常用命令:(截取自【菜鸟教程】)部分演示应用场景 1.2 哈希(hash)类型:同类数据归…

使用rem + sass + 媒体查询 进行横竖屏适配移动端项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、 媒体查询(Media Query)1.简单了解2.简单例子3. 语法(1)媒体类型(mediatype )&#xff0…

快讯 | ALVA 荣获首届“格物杯”联通物联网应用创新大赛复赛一等奖!

8 月 7 日,“物聚龙江 智联百业”物联网创新发展合作交流暨首届“格物杯”联通物联网应用创新大赛企业赛道复赛 (赛区四)在哈尔滨举办。 ALVA Systems 凭借智能远程协助平台—— ALVA Rainbow 在近 50 家企业中脱颖而出,荣获首届“格物杯”联通物联网应…

静态路由配置实验:构建多路由器网络拓扑实现不同业务网段互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置 IP 地址2. 按照需求配置静态路由,实现连接 PC 的业务网段互通 摘要: 本实验旨在通过配置网络设备的IP地址和静态路由,实现不同业务网段之间的互通。通过构建一组具有…

华为云 异构数据迁移

数据库和应用迁移 UGO(Database and Application Migration UGO,以下简称为UGO)是专注于异构数据库结构迁移的专业服务。可将源数据库中的DDL、DML和DCL一键自动转换为华为云GaussDB/RDS的SQL语法,通过数据库评估、对象迁移两大核…

如何实现MongoDB数据的快速迁移?

作为一种Schema Free文档数据库,MongoDB因其灵活的数据模型,支撑业务快速迭代研发,广受开发者欢迎并被广泛使用。在企业使用MongoDB承载应用的过程中,会因为业务上云/跨云/下云/跨机房迁移/跨地域迁移、或数据库版本升级、数据库整…

《TCP/IP网络编程》阅读笔记--基于TCP的服务器端/客户端

1--TCP/IP协议栈 TCP/IP协议栈共分 4 层,可以理解为数据收发分成了 4 个层次化过程; 链路层: 链路层是物理链接领域标准化的结果,专门定义LAN、WAN、MAN等网络标准; IP层: IP层用于解决数据传输过程中路径的…

小程序中如何查看会员的余额和变更记录

​通过查看会员的余额和变更记录,可以帮助商家更好地管理会员资金,提供更好的服务和用户体验。下面将介绍小程序中如何查看会员的余额以及余额的变更记录。 1. 找到指定的会员卡。在管理员后台->会员管理处,找到需要查看余额和记录的会员…

【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用

ref和$refs获取dom元素 为什么会有 ref 和 $refs? 因为在vue页面中使用dom查找元素,不管你是不是在子组件里面查找,查找的都是整个页面的元素,如果你想查找单独组件里面的元素是不容易实现的,除非把每个组件的class写…

Flink---1、概述、快速上手

1、Flink概述 1.1 Flink是什么 Flink的官网主页地址:https://flink.apache.org/ Flink的核心目标是“数据流上有状态的计算”(Stateful Computations over Data Streams)。 具体说明:Apache Flink是一个“框架和分布式处理引擎”,用于对无界…

故障分析 | OceanBase 频繁更新数据后读性能下降的排查

以下文章来源于爱可生开源社区 ,作者张乾 爱可生开源社区. 爱可生开源社区,提供稳定的MySQL企业级开源工具及服务,每年1024开源一款优良组件,并持续运营维护。 测试在做 OceanBase 纯读性能压测的时候,发现对数据做过…

Redis 7 第八讲 集群模式(cluster)架构篇

集群架构 Redis 集群架构图 集群定义 Redis 集群是一个提供在多个Redis节点间共享数据的程序集;Redis集群可以支持多个master 应用场景 Redis集群支持多个master,每个master又可以挂载多个slave读写分离支持数据的高可用支持海量数据的读写存储操作集群自带Sentinel的故障…

等保测评各个级别的详细内容

等保测评是指信息系统安全等级保护测评,是我国信息安全领域中的一项重要工作。根据国家标准《信息系统安全等级保护基本要求》(GB/T 22239-2008)和《信息系统安全等级保护测评技术要求》(GB/T 25070-2010)。 等保测评分为五个级别,分别是:一级…

C#FreeSql分库分表

using FreeSql; using FreeSql.DataAnnotations;namespace FreeSqlMaster {internal class Program{static IFreeSql freeSql null;static void Main(string[] args){// 读写分离// FreeSql 实现了第3种方案,支持一个【主库】多个【从库】,【从库】的查…

栈和队列OJ

一、括号的匹配 题目介绍: 思路: 如果 c 是左括号,则入栈 push;否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 false。栈 stack 为空&#xff1…