[项目前置]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,一经查实,立即删除!

相关文章

iNet Network Scanner Mac 网络扫描工具

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

业务服务:xss攻击

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

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) {…

javaWeb健身房管理系统

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

nacos集群搭建实战

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

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

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

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

Transformer的前世今生 day08(Positional Encoding)

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

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

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

HCIP的学习(4)

GRE和MGRE VPN---虚拟专用网络。指依靠ISP(运营商)或其他公有网络基础设施上构建的专用的安全数据通信网络。该网络是属于逻辑上的。​ 核心机制—隧道机制(封装技术) GRE—通用路由封装 ​ 三层隧道技术,并且是属于…

代码随想录 图论

目录 797.所有可能得路径 200.岛屿数量 695.岛屿的最大面积 1020.飞地的数量 130.被围绕的区域 417.太平洋大西洋水流问题 827.最大人工岛 127.单词接龙 841.钥匙和房间 463.岛屿的周长 797.所有可能得路径 797. 所有可能的路径 中等 给你一个有 n 个节点的…

什么是V R美术馆|V R互动体验店加盟|虚拟现实元宇宙

VR美术馆是利用虚拟现实(VR)技术构建的数字化美术馆,通过虚拟展厅和虚拟展览等形式展示艺术作品、举办艺术展览,为用户提供一种沉浸式的艺术体验。用户可以通过穿戴VR头显等设备,在虚拟环境中自由浏览各种艺术作品&…

20240319-1-过拟合与欠拟合

过拟合欠拟合面试题 1. 如何理解高方差与低偏差? 模型的预测误差可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 偏差 偏差度量了模型的期望预测与真实结果的偏离程度, 即刻画了学习算法本身的拟合能力。偏差则表现为在特定分布上…

启动Hbase shell时有许多日志信息的解决办法

一、问题描述 在使用HBase时,当我们启动HBase shell时,会显示大量的日志信息,这些日志信息可能会干扰我们的操作,我们希望在启动HBase shell时不显示这些日志信息。 二、解决方案 方案一:修改配置文件 我们可以通过修改HBase的…

数据采集用,集成了主流工业通讯协议

IoTClient 是一个物联网设备通讯协议实现客户端,集成了主流工业通讯协议,包括主流PLC通信读取、ModBus协议、Bacnet协议等。该组件基于.NET Standard 2.0,适用于.NET的跨平台开发,可在Windows、Linux等系统上运行,甚至…

c++初阶------c++代码模块

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

centos7二进制安装openstack train版本双网口五节点

这里写目录标题 材料准备宿主机安装KVM 网络规划硬件规划本案例局限性密码规划虚拟机准备网络准备centos7模板机准备 数据库安装安装rabbitMQ消息队列安装memcached服务安装Etcd安装keystone身份服务创建数据库用户keystone安装keystone组件创建admin并启动keystone监听验证key…

由浅到深认识Java语言(18):权限修饰符包Object类

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…