[项目前置]websocket协议

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8 | 网络结构 | 详细讲解YOLOv8的网络结构

⭐欢迎大家订阅我的专栏一起学习⭐ 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 YOLOv5涨点专栏:http://t.csdnimg.cn/70xZa YOLOv8涨点专栏:http://t.csdnimg.cn/Cb89a YOLOv7专栏:http://t.csdnimg.cn/HaTdn 💡魔改网络、复现论文、优化创新💡 …

【No.13】蓝桥杯二分查找|整数二分|实数二分|跳石头|M次方根|分巧克力(C++)

二分查找算法 知识点 二分查找原理讲解在单调递增序列 a 中查找 x 或 x 的后继在单调递增序列 a 中查找 x 或 x 的前驱 二分查找算法讲解 枚举查找即顺序查找, 实现原理是逐个比较数组 a[0:n-1] 中的元素,直到找到元素 x 或搜索整个数组后确定 x 不在…

面试笔记——Redis(双写一致、持久化)

双写一致 双写一致性: 当修改了数据库中的数据,也要更新缓存的数据,使缓存和数据库中的数据保持一致。 相关问题:使用Redis作为缓存,mysql的数据如何与Redis进行同步?——双写一致性问题 回答时&#xff0…

数字范围按位与

链接: 201. 数字范围按位与 - 力扣(LeetCode) 这个题目看起来很难,但是 按位与 的特点是 如果全是1 为 1 其余全为 0 然后这道题其实就是在找最长公共前缀(为啥不说后缀,观察可知,后缀那部分…

【Mysql】硬盘性能压测(Sysbench工具)

1、IOPS和吞吐量介绍 IOPS(每秒输入/输出操作数):是衡量存储设备每秒能够执行的输入/输出操作的数量。对于数据库等需要频繁读写的应用程序而言,IOPS 是一个关键的性能指标。更高的 IOPS 意味着存储设备能够处理更多的读写请求&am…

css盒子模型及浮动

内容(content)、内边距(padding)、边框(border)、外边距(margin) oder:1px solid red; 边框的粗细 边框的样式(虚线还是实线) 边框的颜色 border中也有一些属性可以直接调某一个方向上的边框的粗细,样式,颜色 border-left\bord…

24计算机考研调剂 | 【官方】中国航天系统科学与工程研究院

中国航天系统科学与工程研究院2024年硕士研究生招生预调剂通知 调剂招生信息 研究院概况与专业特色: 中国航天系统科学与工程研究院(简称:十二院)是中国航天科技集团有限公司的直属单位,是在原中国航天工程咨询中心 …

【软考】UML中的图之状态图

目录 1. 说明2. 图示 1. 说明 1.状态图(State Diagram)展现了一个状态机。2.由状态、转换、事件和活动组成。3.关注系统的动态视图。4.对于接口、类和协作的行为建模尤为重要。5.强调对象行为的事件顺序。6.通常包括简单状态和组合状态、转换&#xff0…

十大经典排序算法复杂度、应用场景总结 | 插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序、桶排序、计数排序

前言 好久不见辽,uu们!这几天由于准备专业课的课堂pre,因此一直没能给 “c实现十大经典排序算法” 系列结个尾。本次的十大排序算法包括:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序、桶排序…

递归课堂案例

一个不知名大学生,江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion:2024.03.24 Last edited: 2024.03.24 目录 递归课堂案例 第1关:斐波那契数列 任务描述 相关知识 编程要求 代码如下&#xff1…

java每日一题——买啤酒(递归经典问题)

前言: 非常喜欢的一道题,经典中的经典。打好基础,daydayup!!!啤酒问题:一瓶啤酒2元,4个盖子可以换一瓶,2个空瓶可以换一瓶,请问10元可以喝几瓶 题目如下: 啤酒问题:一瓶…

学习笔记 | 微信小程序项目day03

今日学习内容 配置自定义导航栏通用轮播组件通用的轮播图组件完善以及主页调用分类面板以及热门推荐面板猜你喜欢模块&#xff08;分页查询&#xff09;首页下拉刷新首页骨架屏 配置自定义导航栏 1、创建自定义组件 /index/components/CustomNavbar.vue <script setup l…

关于使用TCP-S7协议读写西门子PLC字符串的问题

我们可以使用TCP-S7协议读写西门子PLC&#xff0c; 比如PLC中定义一个String[50] 的地址DB300.20 地址DB300.20 DB块编号为300&#xff0c;偏移量【地址】是30 S7协议是西门子PLC自定义的协议&#xff0c;默认端口102&#xff0c;本质仍然是TCP协议的一种具体实现&#xff…

ForceField Effects

支持HDRP、URP和LWRP 完全可定制和优化的ForceField VFX Pack。我们使所有着色器和材质都非常易于调整,因此您可以非常轻松地创建自己独特的效果。几乎每个参数都可以调整。所有这些效果都适合于每个游戏,无论是风格化还是现实主义的。该软件包还附带一系列颜色渐变,可用于更…

力扣-20 有效的括号详解 Java

目录 1.题目分析 2.基础知识储备 2.1 哈希表 2.2 栈的存取 3. 逻辑概要 4.源码 示例 1.题目分析 为了对比都是从内而外&#xff0c;一个个匹配&#xff0c;全部匹配成功即为有效字符 2.基础知识储备 2.1 哈希表 简单来说&#xff0c;keyvalue存储 &#xff0c;通过key…

ideaSSM 高校公寓交流员管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 高校公寓交流管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&…

一篇文章搞懂并设计循环队列

目录 1.为什么使用循环队列 2. 循环队列组成 为什么要只使用size-1 个空间存储&#xff1f; 3.循环队列的元素进出 3.1 队尾加入元素 3.2 队头删除元素 3.3 取出队头元素 3.4 取出队尾元素 1.为什么使用循环队列 “假溢出”——》 出队列会空出存储空间&#xff0c;无法…

Gogs - 一款极易搭建的自助 Git 服务

Gogs - 一款极易搭建的自助 Git 服务 1. 使用文档References Gogs https://gogs.io/ https://github.com/gogs/gogs Gogs (/gɑgz/) 项目旨在打造一个以最简便的方式搭建简单、稳定和可扩展的自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并…

模拟-算法

文章目录 替换所有的问号提莫攻击Z字形变换外观数列数青蛙 替换所有的问号 算法思路&#xff1a; 从前往后遍历整个字符串&#xff0c;找到问号之后&#xff0c;就遍历 a ~ z 去尝试替换即可。 class Solution {public String modifyString(String s) {char[] ss s.toCharA…

最近公共祖先(LCA)

祖孙询问 给定一棵包含 n 个节点的有根无向树&#xff0c;节点编号互不相同&#xff0c;但不一定是 1∼n。 有 m 个询问&#xff0c;每个询问给出了一对节点的编号 x 和 y&#xff0c;询问 x 与 y 的祖孙关系。 输入格式 输入第一行包括一个整数 表示节点个数&#xff1b; …