WebSocket 深入浅出

WebSocket 深入浅出

  • 1. WebSocket 是什么
  • 2. WebSocket 建立连接通信的过程
  • 3. WebSocket 和http的联系与区别
  • 4. WebSocket 的使用场景及限制

1. WebSocket 是什么

定义:WebSocket 是一种网络通信协议,它允许在单个TCP连接上进行全双工通信。是HTML5规范提出的,封装在socket协议的上层协议。它是为了解决 客户端发起多个http请求服务器资源 必须要经过长时间轮询的问题而产生的,它能实现多路复用。

初步了解:

  1. WebSocket 协议独立于HTTP,但通常使用HTTP进行初始握手,以建立持久的连接。在握手过程中,客户端发送一个带有特定头部信息的HTTP请求给服务器,服务器在验证请求后,通过响应返回特定的头部信息,表示握手成功。一旦连接建立,服务器和客户端就可以进行实时的双向通信,不需要通过传统的HTTP请求-响应模式。
  2. WebSocket协议允许服务器主动向客户端推送数据,而不仅仅是响应客户端的请求。这种协议特别适用于需要实时数据传输和即时通信的应用,如在线游戏、股票行情等。与HTTP相比,WebSocket在处理二进制内容和实时性方面更为高效,因为它专门针对持久连接和双向通信进行了优化。
  3. WebSocket支持扩展,允许用户自定义协议的一部分,例如通过压缩数据来提高传输效率。总的来说,WebSocket是一种用于创建更高效、实时性更强的Web应用程序的协议。

2. WebSocket 建立连接通信的过程

WebSocket 建立连接的过程通常涉及客户端和服务器之间的一次“握手”过程。包括以下过程:

在这里插入图片描述

  1. 客户端发送一个包含Upgrade头的HTTP GET请求到服务器,请求升级到WebSocket协议。
    • 客户端代码(JavaScript):
      var ws = new WebSocket("ws://example.com/socket");
      
    • 服务器端代码(Node.js):
      	const WebSocket = require('ws');const wss = new WebSocket.Server({ port: 80 });wss.on('connection', function connection(ws) {// 处理WebSocket连接});
      
  2. 服务器响应这个请求,如果接受升级请求,它会返回一个响应状态码为101HTTP响应。
    • 服务器端响应(Node.js):
      	wss.on('upgrade', function upgrade(request, socket, head) {ws.handleUpgrade(request, socket, head, function done(ws) {wss.emit('connection', ws);});});
      
  3. 一旦连接建立,客户端和服务器端都可以开始双向通信。客户端和服务器端代码可以用来发送和接收消息。
    • 客户端发送消息:
      	ws.send('Hello, Server!');
      
    • 服务器端接收消息并处理:
      	ws.on('message', function incoming(message) {console.log('received: %s', message);});
      

3. WebSocket 和http的联系与区别

  1. 联系:
    WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的
  2. 区别:
    1. 含义不同
      • websocket:是在单个TCP连接上进行全双工通信的协议。
      • http:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上,是单向的通信协议。
    2. 连接方式不同
      • websocket:需要浏览器和服务器握手进行建立连接的。
      • http:是浏览器发起向服务器的连接,服务器预先并不知道这个连接。
    3. 连接长度不同
      • websocket:是持久连接。
      • http:是短连接(http可以通过Ajax一直发送请求和长轮询保持一段时间内的连接,但本质上还是短连接)。
    4. 连接状态不同
      • websocket:是有状态的双向连接。
      • http:是无状态的单向连接。
    5. 协议开头不同
      • websocket:协议是以 ws/wss 开头。
      • http:协议是 http/https开头。

4. WebSocket 的使用场景及限制

WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议,能够实现客户端和服务器之间的持续通信。WebSocket 的用途非常广泛,以下是一些常见的使用场景:

  1. 即时通讯WebSocket 可以实现服务器向客户端推送消息的即时通讯功能,比如即时聊天室、在线客服等。
  2. 实时数据流WebSocket 可以用于需要实时响应数据流的应用,如股票价格监控、体育赛事结果更新等。
  3. 在线游戏WebSocket 可以用于游戏开发中,实现服务器与客户端的实时数据通讯,比如游戏中的实时战斗信息等。
  4. 实时数据更新WebSocket 可以用于实时更新网页内容,无需客户端反复发起 HTTP 请求,减少服务器压力,提升用户体验。
  5. 实时大数据分析WebSocket 可以用于实时数据监控和分析,如实时监控系统监控数据、实时日志监控等。

WebSocket 的一些限制包括

  1. 浏览器兼容性:不是所有的浏览器都支持 WebSocket,特别是一些老旧的浏览器。
  2. 代理和防火墙支持:一些网络环境可能不支持或者限制 WebSocket 通信。
  3. 学习曲线WebSocket 需要一定的学习曲线,包括服务器端和客户端的实现。
  4. 数据传输大小限制WebSocket 的数据传输大小受限于单个 HTTP 头部的大小,通常限制在 16KB 左右。
  5. 复杂性WebSocket 比简单的 HTTP 请求要复杂,需要服务器和客户端的配合。

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

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

相关文章

电商技术揭秘三十七:电商智能风控业务架构设计

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘二十八:安全与合规性保障 电商技术揭秘二十九:电商法律合规浅析 电商技术揭秘三十:知识产权保…

无人机+激光雷达:高精度测绘级实时点云激光雷达技术详解

在现代测绘技术中,无人机与激光雷达的结合已经成为一种重要的技术手段。激光雷达(LiDAR)是一种主动式航空传感器,通过发射激光束并探测其与目标物体的反射,可以获取目标物体的位置、速度等特征信息。而无人机则作为一种…

web.config 学习

1 appSettings 节 打开一个项目的web.config文件看一下&#xff1b;appSettings节如下&#xff0c; <appSettings><add key"Telerik.Skin" value"Windows7" /><add key"ValidationSettings:UnobtrusiveValidationMode" value&qu…

ULTIMATE VOCAL REMOVER V5 for Mac:专业人声消除软件

ULTIMATE VOCAL REMOVER V5 for Mac是一款专为Mac用户设计的人声消除软件&#xff0c;它凭借强大的功能和卓越的性能&#xff0c;在音乐制作和后期处理领域崭露头角。 ULTIMATE VOCAL REMOVER V5 for Mac v5.6激活版下载 这款软件基于深度神经网络&#xff0c;通过先进的训练模…

不可重复读,幻读和脏读

不可重复读一般在读未提交&#xff0c;读已提交这两种隔离级别出现&#xff0c;第一次读和第二次读的数据不一致。 幻读一般在读未提交&#xff0c;读已提交&#xff0c;可重复读出现&#xff0c;原因是第一个事务执行时&#xff0c;第二个事务完成了提交&#xff0c;在第一个…

解决HttpServletRequest中的InputStream/getReader只能被读取一次的问题

一、事由 由于我们业务接口需要做签名校验&#xff0c;但因为是老系统了签名规则被放在了Body里而不是Header里面&#xff0c;但是我们不能在每个Controller层都手动去做签名校验&#xff0c;这样不是优雅的做法&#xff0c;然后我就写了一个AOP&#xff0c;在AOP中实现签名校…

Stable Diffusion教程:额外功能/后期处理/高清化

"额外功能"对应的英文单词是Extras&#xff0c;算是直译。但是部分版本中的翻译是“后期处理”或者“高清化”&#xff0c;这都是意译&#xff0c;因为它的主要功能是放大图片、去噪、修脸等对图片的后期处理。注意这里边对图片的处理不是 Stable Diffusion 本身的能…

RabbitMq基础概念知识复习

消息拥有消息头和消息体&#xff0c;消息具有rounting key&#xff0c;主题交换机和扇形交换机都是分布与订阅的实现方式&#xff0c;主题交换机用于匹配接收的消息的rount key 动态匹配模式匹配到多个符合的队列&#xff0c;扇形fanout交换机则不会使用消息的路由key&#xff…

PyTorch深度学习实战(41)——循环神经网络与长短期记忆网络

PyTorch深度学习实战&#xff08;41&#xff09;——循环神经网络与长短期记忆网络 0. 前言1. 循环神经网络1.1 传统文本处理方法的局限性1.2 RNN 架构2.3 RNN 内存机制 2. RNN 的局限性3. 长短期记忆网络3.1 LSTM 架构3.2 构建 LSTM 小结系列链接 0. 前言 循环神经网络 (Recu…

数据结构––串

5.1 串的定义 由零个或者任意多个字符组成的有限序列&#xff0c;是一种特殊的顺序表&#xff0c;每一个元素都是单独一个字符 空格也可以是一个字符 串的长度&#xff1a;串中的有效元素的个数&#xff08;不包括\0&#xff09; 空串&#xff1a;不包括任何元素的串&#…

web server apache tomcat11-26-maven jars

前言 整理这个官方翻译的系列&#xff0c;原因是网上大部分的 tomcat 版本比较旧&#xff0c;此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎&#xff0c;轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

传统过程自动化工厂的智能扩展

一 通过NOA概念&#xff0c;公开、安全地迈向未来 随着数字化转型在过程自动化工业中的不断深入&#xff0c;许多公司都面临着同一挑战——如何平衡创新和传统。放眼望去&#xff0c;过程自动化工业和信息技术似乎在以不同的速度发展。虽然过程自动化工厂通过使用传统的自动化…

基于Springboot的幼儿园管理系统

基于SpringbootVue的幼儿园管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 用户管理 教师管理 幼儿园信息管理 班级信息管理 工作日志管理 会议记录管理…

Go语言中,常用的同步机制

在 Go 语言中&#xff0c;保证多线程&#xff08;或者更准确地说&#xff0c;多协程&#xff09;有序执行&#xff0c;主要依赖于协程间的同步机制。Go 提供了几种工具来帮助开发者控制协程&#xff08;goroutine&#xff09;的执行顺序&#xff0c;确保数据的一致性和操作的原…

大模型实战提示工程4—结构化信息与代码相关任务示例

1. 结构化信息处理类 1.1. 命名实体识别(Named Entity Recognition, NER) 任务描述:从中文文本中识别具有特定意义的实体,如人名、地点、组织、时间等。 示例:原文:"小米集团 CEO雷军在2024年 发布了小米汽车。" 实体识别结果: 人名:雷军职务:小米集团 …

Vue2基础知识:组件的样式冲突scoped,为什么加了scoped样式就会独立出来呢?

默认情况&#xff1a;写在组件中的样式会全局生效&#xff0c;这样就容易造成多个组件之间的样式冲突问题。 1.全局样式&#xff1a;默认组件中的样式会作用到全局.&#xff08;也就是说不管你在哪个页面或者组件中写入样式&#xff0c;只要页面生效&#xff0c;该页面的style…

七大排序算法(Java实现)——冒泡、快排、插入、希尔、选择、堆排、归并

升序排序为例 交换元素的通用代码&#xff1a; /*** 交换元素* param arr* param idx1* param idx2*/private void swap(int[] arr, int idx1, int idx2) {int tmp arr[idx1];arr[idx1] arr[idx2];arr[idx2] tmp;} 一、交换排序——冒泡排序 冒泡排序&#xff1a; 相邻两…

sql连续登录

1、sql建表语句 DROP TABLE IF EXISTS app_login_record; CREATE TABLE app_login_record (user_id int(0) NULL DEFAULT NULL,enter_time datetime(0) NULL DEFAULT NULL,leave_time datetime(0) NULL DEFAULT NULL );INSERT INTO app_login_record VALUES (789012, 2023-05-…

自动式挂机游戏,全新玩法,实现睡后收入,日产8000

项目简介&#xff1a; 最近&#xff0c;许多朋友询问关于支付宝钱包无人直播游戏的玩法。我已经研究了一个月&#xff0c;今天终于迎来了好消息&#xff01;市场上的价格在1980到5980元不等&#xff0c;但今天我花了1980元买下了这个游戏的玩法。老实说&#xff0c;原本这个玩法…