[项目前置]websocket协议

news2024/9/28 5:24:55

websocket协议介绍

WebSocket 协议是一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更简单,允许服务器主动向客户端推送数据。它在 2011 年成为国际标准,现在被所有现代浏览器支持。WebSocket 设计用于取代传统的轮询技术,如长轮询,使得数据可以即时传输,减少延迟和网络负载。

传统的web程序都是属于“一问一答”的形式,即客户端给服务器发送了一个HTTP请求,服务器给客户端返回一个HTTP响应。这种情况下服务器属于被动的一方,如果客户端不主动发起请求,服务器就无法主动给客户端响应。

像网页即时聊天/游戏 这样的程序都是非常依赖“消息推送”的,即需要服务器主动推送消息到客户端。如果使用原生的HTTP协议,要想实现“消息推送”一般需要通过“轮询”(客户端定时向服务器发送请求来刷新)的方式实现,但轮询非常占用带宽(成本高)并且也不能及时获取到消息的响应(延迟高)

WebSocket原理

  1. 握手: 首先,客户端通过发送一个 HTTP 请求到服务器来初始化一个 WebSocket 连接。这个请求称为"握手"。不同于普通的 HTTP 请求,这个请求包含了一些特殊的头部,例如Upgrade: websocketConnection: Upgrade,指示服务器这是一个 WebSocket 连接的请求。

  2. 服务器响应: 如果服务器支持 WebSocket 协议,它会返回一个 HTTP 状态码 101(切换协议)的响应,表示同意建立 WebSocket 连接。之后,客户端和服务器之间的通信就从 HTTP 协议切换到 WebSocket 协议。

  3. 数据传输: 一旦握手成功,客户端和服务器就可以在这个单独的 TCP 连接上进行全双工通讯了。WebSocket 协议支持文本和二进制数据的传输。数据包被称为"消息",每个消息可以分成一个或多个"帧"进行传输。

  4. 保持连接: WebSocket 连接会保持活动状态,直到客户端或服务器决定关闭连接。这允许数据能够快速且实时地在双方之间传输,非常适合需要实时功能的应用,如在线游戏、聊天应用和实时交易系统。

特点

  1. 减少通信延迟: 相比于 HTTP 轮询,WebSocket 提供了更低的通信延迟。
  2. 减少网络负载: 在 WebSocket 连接中,服务器和客户端之间的消息头部比 HTTP 小得多,这减少了网络负载。
  3. 实时双向通信: WebSocket 使得服务器能够主动向客户端推送信息,而不需要客户端频繁地请求。
  4. 兼容性: WebSocket 设计为兼容 HTTP 协议,易于实现和部署。

使用场景

WebSocket 特别适用于需要快速、实时通讯的应用,如:

  • 实时消息应用
  • 在线游戏
  • 实时通讯系统
  • 金融交易平台(实时报价)
  • 协同编辑应用
  • 实时监控系统

WebSocket 协议的引入是现代 Web 开发的一个重要进步,为开发者提供了更多的可能性,使得创建实时、互动的 Web 应用成为可能。

接口

在项目中有使用到websocketpp库。它允许将WebSocket客户端和服务器功能集成到C++程序中。在最常见的配置中,全功能网络I/O由Asio网络库提供。

项目:[项目设计]基于websocket实现网络对战五子棋-CSDN博客

以下是一些相关的常用网站:

用户手册:WebSocket++: Main Page

github:GitHub - zaphoyd/websocketpp: C++ websocket client/server library

官网:WebSocket++ | Zaphoyd Studios

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

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

相关文章

【蓝桥杯选拔赛真题72】python找路线 第十四届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python找路线 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python找路线 第十四届蓝桥杯青少年组python比赛选拔赛真题 一、题目要求 …

mysql基础2多表查询

多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工,一个员工对应一个部门 实现: 在多的一方建立外键,指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程,一门课程也可以…

鸿蒙实战开发:【7日天气预报】

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式, 数据接口是[和风(天气预报)], 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是,查询当前城市的实时天气, 目前已实现的功…

阿里云服务器价格表2024,最新报价2核2G/2核4G/4核8G/8核16G/16核32G

2024年腾讯云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

【嵌入式学习】Qtday03.24

一、思维导图 二、练习 QMovie *mv new QMovie(":/Logo/giphy (2).gif");ui->label_5->setMovie(mv);ui->label_5->setScaledContents(true);mv->start();this->setWindowIcon(QIcon(":/Logo/bdf48b5198c8417da0e4fef6b72c5657.png"));/…

mysql 存储引擎 基本介绍

目录 一 存储引擎概念介绍 (一)存储引擎概念 (二)MySQL常用的存储引擎 (三)存储引擎运作方式 二 MyISAM 存储引擎介绍 (一) MyISAM 存储引擎特点 1,不支持…

WorkPlus AI助理,为企业提供智能化客户服务,助力企业发展与竞争力

在当今竞争激烈的商业环境中,提供优质高效的客户服务是企业取得成功的关键。而AI智能客服的崛起,以其卓越的性能和功能,助力企业提升客户服务体验。WorkPlus AI助理作为一款领先的解决方案,能够实现智能化客户服务,满足…

SVN的branch分支合并完要不要删除

在 SVN 中,当一个分支(branch)的工作已经完成并成功合并回主干(trunk)后,通常不需要立即删除该分支。保留分支可以有一些好处,例如: 历史记录和追溯:保留分支可以帮助团…

蓝桥杯练习04学生成绩统计

学生成绩统计 介绍 随着大数据的发展,数据统计在很多应用中显得不可或缺,echarts作为一款基于JavaScript的数据可视化图表库,也成为了前端开发的必备技能,下面我们一起来用echarts开发一个学生数据统计的柱形图。 准备 开始答…

性能调优专题并发编程专题(持续更新)

一、性能调优专题 MySQL相关 一、深入理解MySQL索引底层数据结构与算法 索引概念:索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构: 1、二叉树 缺点:当索引字段有序的时候,不会自动平衡二叉树,数据…

Spring Boot方法

Spring Boot方法 1、 equals:确保比较的是字符串的内容。这样可以避免潜在的错误,并确保正确地比较字符串的值。 1、 equals:确保比较的是字符串的内容。这样可以避免潜在的错误,并确保正确地比较字符串的值。

Echarts地图之——如何给地图添加背景图片

上期我们已经给地图添加了一个阴影3d的效果,但是背景纯色的感觉还是不怎么好看,希望能给地图加个背景图。 一般来说给地图加背景图的情况较少,加个渐变色或者根据数据的情况给某些省份设置不一样的背景色,这样的做法是比较多的。…

如何用联合(共用体)union验证系统大小端

一:思路 由联合体的特点,可知上图,char c 和 int i 共用四个字节,假设是小端,则由左到右是低地址到高地址,四个字节的内容如图所示01 00 00 00 代码展示: 如果第一个字节是1,则证明…

PostgreSQL关系型数据库介绍与部署

使用背景 在过去的几年中,PostgreSQL的使用量逐渐增加,而Oracle和MySQL的使用量则有所下降。这主要是由于以下几个原因:开源和免费、功能丰富、可扩展性强、安全性高、跨平台支持好、社区活跃、成熟稳定。这些因素使得PostgreSQL成为了许多开…

qt Qt Remote Object(QtRO)实现进程间通信

简介 Qt Remote Object简称QtRO,这是Qt5.9以后官方推出来的新模块,专门用于进程间通信(IPC)。是基于Socket来封装的,兼容LPC和RPC。LPC即Local Process Communication,而RPC是指Remote Process Communicat…

科技云报道:造完“大模型”,“具身智能”将引领AI下一个浪潮?

科技云报道原创。 资深机器人专家Eric Jang不久前曾预言:“ChatGPT 曾在一夜之间出现。我认为,有智慧的机器人技术也将如此。” 3月13日深夜,一段人形机器人的视频开始热传。 在视频中,Figure的人形机器人,可以完全…

代码随想录阅读笔记-栈与队列【有效的括号】

题目 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。 …

python必刷算法

数组 二分法 二分法满足从小到大排序无重复元素 1 两个边界&#xff0c;left,right 2 中间值的选择 3 边界问题考虑有两种 left < right 当left < right的时候&#xff0c;说明mid比较的时候已经比较了left right def search(self, nums: List[int], target: int) ->…

数据分析与挖掘

数据起源&#xff1a; 规模庞大&#xff0c;结构复杂&#xff0c;难以通过现有商业工具和技术在可容忍的时间内获取、管理和处理的数据集。具有5V特性&#xff1a;数量&#xff08;Volume&#xff09;&#xff1a;数据量大、多样性&#xff08;Variety&#xff09;&#xff1a…

基于VS code 实现Java前后端打通—基础—使用Springboot+postgreSql+mybatis+Navicat

前言&#xff1a; 作者学习webjava后的而总结&#xff0c;总的流程概括就是先使用springboot创建项目&#xff0c;在application.properties中完成相应的postgreSql和mybaits的环境配置和.xml文件中dependecy依赖配置&#xff0c;entities实现数据表的类型模板&#xff0c;分别…