[项目前置]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

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

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

相关文章

0058__developer-roadmap最全的开发者技术学习路线

GitHub - kamranahmedse/developer-roadmap: Interactive roadmaps, guides and other educational content to help developers grow in their careers. 259k Star!这是我见过最全的开发者技术学习路线! - 掘金

iNet Network Scanner Mac 网络扫描工具

iNet Network Scanner for Mac是一款功能强大的网络扫描工具,专为Mac用户设计。它提供了全面而深入的网络分析功能,使用户能够轻松获取Mac连接的网络和设备的详细信息。 软件下载:iNet Network Scanner Mac v3.1.0激活版 这款软件具备多种扫描…

WPF —— Menu数据绑定实例

{Binding} 因为我们操作这个集合对象&#xff0c;而不是集中某个对象&#xff0c;所以直接写{Binding}就行 如果绑定是list集合的某个对象属性时候&#xff0c;需要{bindingvpath 属性名} <Menu x:Name"m1" ItemsSource"{Binding}">&l…

业务服务:xss攻击

文章目录 前言一、使用注解预防1. 添加依赖2. 自定义注解3. 自定义校验逻辑4. 使用 二、使用过滤器1. 添加配置2. 创建配置类3. 创建过滤器4. 创建过滤器类5. 使用 前言 xss攻击时安全领域中非常常见的一种方法&#xff0c;保证我们的系统安全是非常重要的 xss攻击简单来说就…

P2123皇后游戏

P2123皇后游戏 参考题解 #include <iostream> #include <algorithm> using namespace std;int T; int n; long long res;struct Person {int a,b,d; }p[20005];bool person_cmp(const Person& x,const Person& y) {if(x.d y.d){if(x.d < 0)return x.a …

torchrun在验证集使用一个GPU时报NCCL超时:Watchdog caught collective operation timeout的解决方案

有时候在分布式训练时&#xff0c;可能会出现nccl通信超时的问题&#xff0c;出现的原因好像是在某些数据处理、加载等过程&#xff0c;多个进程一起完成&#xff0c;但是某些计算&#xff08;比如loss具体不知道都有啥&#xff09;需要rank0自己来做&#xff0c;但是由于默认的…

语言模型:解密AI语言理解之道

在这个信息爆炸的时代,我们每天都在与海量的文本数据打交道。如何从这些文本中提炼出有价值的信息,成为了科技界的一大挑战。而语言模型,正是解决这一挑战的关键技术之一。今天,就让我们一起走进语言模型的神秘世界,探索其原理、实战与评估的奥秘。 一、原理篇:语言模型…

Javascript——Symbol简单了解

一、Symbol(符号) 1.1 MDN链接&#xff1a;yield - JavaScript | MDN (mozilla.org) 1.2 Symbol简介 Symbol(符号)是ECMAScript6新增的数据类型。符号是原始值&#xff0c;且符号实例是唯一、不可变的。符号的用途是确保对象属性使用唯一标识符&#xff0c;不会发生属性冲突…

TCP(socket 套接字)编程 1

一、TCP套接字编程架构如下 二、相关代码实现 1、服务器端代码 package com.company;import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket;public class Main {public static void main(String[] args) {…

5.88 BCC工具之tcpsynbl.py解读

一,工具简介 tcpsynbl工具以直方图的形式显示SYN到达时的TCP SYN积压大小。这可以让我们了解应用程序距离达到积压限制并丢弃SYN(导致SYN重传产生性能问题)还有多远。 TCP SYN 数据包则通常用于启动 TCP 三次握手过程的第一次握手。 二,代码示例 #!/usr/bin/env python…

javaWeb健身房管理系统

一、简介 随着人们健康意识的增强和生活水平的提高&#xff0c;健身已经成为了现代人生活中不可或缺的一部分。为了更好地管理健身房的日常运营&#xff0c;我们设计并开发了一款基于 JavaWeb 的健身房管理系统。本系统采用了最新的技术&#xff0c;包括 Spring Boot、MyBatis…

nacos集群搭建实战

集群结构图 初始化数据库 Nacos默认数据存储在内嵌数据库Derby中&#xff0c;不属于生产可用的数据库。官方推荐的使用mysql数据库&#xff0c;推荐使用数据库集群或者高可用数据库。 首先新建一个数据库&#xff0c;命名为nacos&#xff0c;而后导入下面的SQL&#xff08;直…

智慧工地源码 数字孪生可视化大屏 工地管理平台系统源码 多端展示(PC端、手机端、平板端)

智慧工地源码 数字孪生可视化大屏 工地管理平台系统源码 多端展示&#xff08;PC端、手机端、平板端&#xff09; 智慧工地系统多端展示&#xff08;PC端、手机端、平板端&#xff09;;数字孪生可视化大屏&#xff0c;一张图掌握项目整体情况;使用轻量化模型&#xff0c;部署三…

ubuntu22.04配置Azure Kinect DK深度相机

一.安装SDK 今天我来配置一下微软公司的Azure Kinect DK深度相机,以前在ubuntu18.04上配置过,因为官方说唯一支持linux版本是18.04,所以在18.04中配置还算顺利 but这不代表不可以在更高版本的ubuntu中使用,只不过需要自己去多配置一些东西 apt 源安装 更新源: c…

25.7 MySQL 数据库和表的基本操作

1. 基础知识 1.1 一条数据的存储过程 存储数据确实是处理数据的基石, 只有确保数据被准确无误且有条理地存储, 我们才能对其进行深入的处理和细致的分析. 否则, 这些数据就像是一团毫无章法的乱麻, 让我们难以捉摸其内在的逻辑和价值.那么, 如何才能够将用户那些与经营紧密相关…

VITIS更新硬件平台

VITIS硬件平台更新以后如何重新导入 在之前建立的硬件平台上右击&#xff0c;选择Update Hardware Specification&#xff0c;选择最新导出的硬件平台文件&#xff1b; 重建板级支持包 选择复位重建BSP源文件&#xff0c;俩个地方的BSP都Reset一下&#xff0c;然后Build&…

使用SqlDataAdapter和DataSet维护数据库表数据

使用SqlDataAdapter和DataSet维护数据库表数据一般按照如下步骤操作&#xff1a; 1.建立数据库连接 2.使用sql查询语句创建SqlDataAdapter实例&#xff0c;并利用SqlCommandBuilder自动生成SqlDataAdapter对象的InsertCommand&#xff0c;UpdateCommand&#xff0c;DeleteCom…

Transformer的前世今生 day08(Positional Encoding)

前情提要 Attention的优点&#xff1a;解决了长序列依赖问题&#xff0c;可以并行。Attention的缺点&#xff1a;开销变大了&#xff0c;而且不存在位置关系为了解决Attention中不存在位置关系的缺点&#xff0c;我们通过位置编码的形式加上位置关系 Positional Encoding&…

LinkedIn账号为什么被封?被封后如何解决?

近期会有一些小伙伴说自己遇到了帐号无法登录的情况&#xff0c;其实出现领英帐号被封号(被限制登录)主要会有两类情况&#xff0c;今天就给大家分享一下如果被封该如何解决&#xff0c;强烈建议收藏。 在电脑领英官网或者手机领英APP上&#xff0c;输入领英帐号密码点击登录后…