C++在线五子棋对战(网页版)项目:websocket协议

目标:认识理解websocket协议、websocket切换过程和websocket协议格式。认识和学会使用websocketpp库常用接口。了解websocketpp库搭建服务器流程,认识和学会使用websocketpp库bin接口,最后使用websocketpp库搭建服务器。

初识websocket

平时我们在逛某宝,点击商品查看商品信息,从HTTP角度来看,就是客户端向某宝的服务器发送了一次HTTP请求,服务器接收到请求后,就将HTTP响应发送给客户端,这种情况下,服务器不会主动向客户端发送一次消息,就好像你的女神永远不会给你主动发一次信息一样。

当我们在逛网页的时候,突然发现网页的边边角角上弹出一个框框,上面写着:系兄弟就来砍我,我在沙场等你!点击进去后,我们注册用户,进入到游戏后,发现有一直怪在攻击我们。像这样的我们全程每动过一次鼠标键盘,服务器就会将怪物的移动数据和攻击数据源源不断地发送给我们客户端的情况,其实看起来就是服务器在主动向客户端发送消息。

HTTP定时轮询会有以下两个问题:①当我们使用f12打开页面时,就会发现满屏幕的HTTP请求,这就会消耗带宽,并且增加服务器的负担。②在最快的情况,用户扫码后,都需要等待1到2秒的时候,前端才会再次发送一次HTTP请求,然后才跳转页面,用户会感到明显的卡顿或延迟。

不管是HTTP定时轮询还是长轮询机制,本质都是客户端主动向服务器发送消息,服务器才会响应客户端,像扫码这样的场景还可以去用,但是如果是网页游戏呢?一般而言,游戏都会有大量的数据需要服务器主动推送给客户端,此时,需要websocket了。

WebSocket是从HTML5开始支持的一种网页端和服务端保持长连接的消息推送机制。

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

而像在网页即时聊天或者五子棋对战中这种程序中,都是非常依赖“消息推送”的,即需要服务端主动推送消息给客户端。因此,只是使用原生的HTTP协议,想要实现消息推送一般需要通过轮询的方式实现。

基于上述两个问题,就产生了WebSocket协议。WebSocket更接近于TCP这种级别的通信方式,一旦连接建立完成客户端或者服务器都可以主动地向对方发送数据。

原理解析

从HTTP协议切换到websocket协议

在建立TCP连接后(三次握手后),客户端向服务端发送一个HTTP请求,希望可以切换协议,切换成websocket协议。在HTTP请求当中,包含的重要信息有:

HTTP请求行GET/wsHTTP/1.1希望切换协议Connection:Upgrade切换的协议格式Upgrade:Websocket切换的协议的版本Sec-WebSocket-Version:xxx通信的钥匙Sec-WebSocket-Key:xxx

服务端收到请求后,会查看客户端想要切换的协议和版本自己是否支持,如果支持,那么就会同意切换,并且发送HTTP响应给客户端,HTTP响应中包含的重要信息有:

响应行HTTP/1.1101xxx101表示切换协议的响应切换协议Connection:Upgrade切换的协议格式Upgrade:Websocket通信的钥匙,也表示同意切换Sec-WebSocket-Accept:xxx

切换完成,后续客户端和服务端直接就可以使用websocket协议进行通信,服务端可以主动给客户端推送请求了。

WebSocket协议格式

websocketpp库常用接口

WebSocketpp是个跨平台的开源(BSD许可证)头部专用C++库,它实现了RFC6455(WebSocket协议)和RFC7692(WebSocketCompressionExtensions)。它允许将WebSocket客端和服务器功能集成到C++程序中。在最常见的配置中,全功能络I/O由Asio络库提供。

WebSocketpp的主要特性包括:

·事件驱动的接口·持HTTP/HTTPS、WS/WSS、IPv6·灵活的依赖管理—Boost库/C++11标准库·可移植性:Posix/Windows、32/64bit、Intel/ARM·线程安全

WebSocketpp同时支持HTTP和Websocket两种网络协议,比较适用于我们本次的项目,所以我们选用该库作为项目的依赖库用来搭建HTTP和WebSocket服务器。

下面是websocketpp的常用接口,用于在写项目时做参考:

lib::weak_ptr:弱指针类,用于表示指向对象的非拥有引用。lib::shared_ptr:共享指针类,用于管理动态分配的对象的所有权。lib::asio::steady_timer:基于asio的稳定定时器类,用于定时触发事件。lib::function:函数对象类,用于保存和调用可调用对象。那么在上面提供的类和函数接口中,有用到lib命名空间的有:

使用websocketpp搭建服务器

搭建服务器的基本流程

1.实例化server对象。2.设置日志输出等级。3.初始化asio框架种的调度器。4.设置业务处理回调函数(具体业务处理的函数由我们自己实现)。5.设置服务器监听端口。6.开始获取新建连接。7.启动服务器。

bind的使用

C++11中的bind,作用是用于实现对函数进行参数绑定的功能。

比如:我们实现了一个print函数:

voidprint(char*str)fstd:cout<

如果选择使用bind将函数和参数进行绑定,那么就不需要传参数了。

autofunc=std:.bind(print,"nihao");对print函数进行参数绑定并生成了一个新的可调用对象funcfunc();函数调用等价于print("nihao");此外,如果还有参数传入,比如:

voidprint(char*str,intnum){std:cout<

autofunc=std.bind(print,"nihao",std:placeholders:._1);对print函数进行参数绑定并生成了一个新的可调用对象funcfunc(10);函数调用等价于print("nihao",10);示例代码:

使用websocketpp搭建简单服务器

通过上面搭建服务器的基本流程,我们可以逐一实现出来:

从websocketpp的常用接口的介绍中可以看到,server类继承endpoint类,需要传入模板参数websocketpp中的config,而需要用到asio框架。

/*定义server类的类型,可变参数为websocketpp::config::asio,因为server继承的endpoint类需要传入这个模板参数*/typedefwebsocketpp::serverwsserver_t;wsserver_twssrv;完整代码如下:

总结一点就是:

HTTP请求回调处理函数主要是处理来自客户端的HTTP请求,它从连接对象中获取HTTP请求的正文,并通过请求对象获取URI和方法等信息,然后根据不同的方法和URI来进行相应的处理,最后构建HTTP响应对象并发送回客户端。HTTP是一种无状态协议,每个请求都是独立的。WebSocket消息处理回调函数主要是处理来自客户端的WebSocket消息,它从连接对象中获取WebSocket消息的内容,并进行相应的处理逻辑。不像HTTP请求那样需要获取URI和方法等信息,WebSocket是一种双向通信协议,服务器和客户端可以在持久连接上进行实时双向通信。这个回调函数通过使用连接对象的send方法直接将响应消息发送回客户端。

THE END
1.MicrosoftC/C++ドキュメントMicrosoftLearnライブラリ C++ ビルド プロセス C++ を使用した Windows プログラミング C++、C、およびアセンブリ言語を使用して、お使いのプラットフォームやデバイス用のアプリケーション、サービス、ツールを開発する方法について説明します。https://learn.microsoft.com/ja-jp/cpp/
2.C++高效编程网页版网页版c++,c++网页版资源C++高效编程 C++ 浏览:46 C++高效编程,提高程序运行和执行效率的一本国外经典书。网页格式直接浏览。注意:在弹出的提示中点击允许。 C++ 高效编程 (Effective C++) 浏览:200 C++ 高效编程是学习C++的一门经典教材,特此献上该书的电子档(html网页格式)。 TeachYourselfC++网页版 浏览:118 这是网页版的pdf,按https://download.csdn.net/download/lunha/4188425
3.高质量C++/C编程指南(网页版)六界剑仙http://man.chinaunix.net/develop/c&c++/c/c.htmhttps://www.cnblogs.com/swordmanwj/articles/2674892.html
4.FreeRTOS上线中文版网页,C++获得2022年度编程语言最近,TIOBE网站发布了 2022 年度编程语言,C++获得了冠军,因为 2022 年C++ 获得了4.62%的最大的人气,而C语言获得了(+3.82%)的人气,成为了亚军。 时隔20年,C++再居榜首,虽然这些年被JAVA、C、Python超越,但依然排名前五,还是非常不错的一款编程语言。https://www.eefocus.com/article/1394428.html
5.C++制作的网页浏览器程序源代码摘要:VC/C++源码,网络相关,浏览器 VC++制作的网页浏览器程序,支持向前、向后翻页,支持刷新,实现了基本的网页浏览功能,不过好像没有屏蔽弹窗的功能,测试时候发现该弹出来的弹窗都弹了,呵呵,必竟是前些年写的程序,发上来仅供参考吧,感谢大家来捧常VC++源码版的网页浏览器,欢迎下载。 https://www.iteye.com/resource/amandinelaura-11022692
6.简书2024美漫《秘密关卡》在线观看全集免费播放完整版【1080p超清中字】《秘密关卡》高清HD在线播放完整未删减版百度云/夸克迅雷资源网盘免费高清链接下载 《秘密关卡》是由《爱、死亡和机器人》团队打造的15集动画剧集,于2024年12月10日在亚马逊Prime Video上线. ?提示:文章排版原因 https://www.jianshu.com/
7.C++编译器下载C++编译器手机版2024官方下载查找手机版C++编译器下载?PP提供C++编译器2024版官方下载。C++编译器是一款非常精简的APP,主要为C++语言初学者提供核心的功能,能够验证一些小程序。该软件支持从文件管理器中打开代码,方便用户浏览查看。 C++编译器更新说明: 使用的编译模块 C++编译器10.4.1下载安装说明: 下载C++编译器手机上面的方法很多。安卓系统手机https://wap.pp.cn/app_BywhcxYDgzu/
8.程序员远程斗代码!网页版Skype推出内置实时代码编辑器Skype Interviews 目前支持其中流行的编程语言,C、C++、C#、Java、JavaScript、Python 和 Ruby。它还支持代码高亮显示,还能够自动检测代码语法错误。 网页版 Skype 最近推出了一个新功能 Skype Interviews,它可以在窗口显示实时代码编辑器,一边写代码一边聊天,方便程序员进行视频面试或者远程教学,不用再多个窗口间频繁切换https://www.51cto.com/article/549555.html
9.《以撒的结合:重生》网页版图鉴卡瓦邦噶!《以撒的结合:重生》网页版图鉴 这个月以撒登陆 PSN 啦!最近又拾起了这个游戏,却发现好多道具都忘记了。《以撒的结合:重生》这款游戏中,有四百多种道具,而且游戏里面,道具没有说明,只有图片。所以在拾起来道具之前,很难知道道具的作用。 于是,图鉴就成为这个游戏重要的辅助工具。以前我们用的图鉴,都是从一个以撒http://www.kawabangga.com/posts/1230
10.短信网页版短信手机版短信服务商短信网页版 登录注册 验证码/通知短信接口文档点击下载 验证码/通知短信接口接入指南点击访问 注册/登录页图形验证工具点击访问 本文介绍了短信发送功能的实现,通过该文章,用户可以为自己的网站、App、小程序等快速接入短信发送功能。支持发送验证、通知及营销类短信内容。适用于用户注册、会员登录、找回密码、订单通知场景https://www.ihuyi.com/baike/1000714049924.html
11.快对作业网页版在线下载快对作业 网页版在线操作起来也十分的方便 版本:3.23.6 平台:安卓 类型:学习教育 更新:2024-10-24 07:30 厂商: 语言:中文 权限:查看 隐私:查看 备案C++编译器 大小:60.33MB 版本:11.1.1 C语言编译器 大小:71.38MB 版本:11.1.1 逻辑电路模拟器 大小:26.96MB 版本:36.0.0 大学搜题酱 大小:46.60https://shouyou.3dmgame.com/android/237474.html
12.c++编译器下载c++编译器v10.2.5最新版电脑免费中文下载c++编译器采用先进的编译技术,显著提升C++代码编译速度,缩短开发周期,内置智能优化算法,自动分析代码结构,优化执行效率,减少资源消耗。支持多种操作系统平台,包括Windows、Linux、macOS等,确保代码无缝迁移。 软件特色 强大调试功能 集成先进的调试工具,支持断点、单步执行、变量监视等,助力快速定位问题。 代码分析与重构 提https://patch.ali213.net/showpatch/255635.html
13.《梦幻西游网页版》五行格斗黄金竞技场宫级通关攻略梦幻西游网页版苹果版 类型:角色扮演 语言:中文 RPG挂机西游 手机浏览 苹果版 安卓版 《梦幻西游网页版》是网易出品的回合制大作。 一种领袖的感觉,WoT5Sf9dY3xrRXzX6kQ5Q3smcsRkYMW7Lf2r6vP94iafLhC++dmv2jX/9z3wGf/sbH+Ctu2f49/6X323u/Ts//9kyC9+MHU2/873H+Jk3e5ycLLbQ09QOm6G6oXJGwhttps://www.44down.com/news/3619.html
14.如何通过C++编写一个简单的网页编辑器程序?C++随着互联网的普及,网页成为人们获取信息和展示内容的重要手段。为了满足用户的需求,开发一个简单易用的网页编辑器至关重要。本文将介绍如何使用C++编写一个基于控制台的简单网页编辑器程序,帮助读者了解基本的网页编辑原理。 步骤: 确定程序的功能和架构: 确定程序需要实现的基本功能,如创建和编辑网页、添加文本和图片等https://m.php.cn/article/625996.html
15.抖音电脑网页版入口IT问答中心根据查询抖音官网显示,6月21日,抖音网页版正式上线,用户无需使用安卓模拟器,可直接打开抖音网页版官网观看视频。抖音网页版整体简洁,提供的视频标签包含:全部、直播、娱乐、知识、二次元、游戏、美食、体育、时尚、音乐,功能比较丰富,支持暂停、拖拽进度条、倍速观看、悬浮小窗、音量调节、全屏观看,支持点赞视频和查https://www.ujiuye.com/wenda/2023/73227.html
16.网页版《星际争霸》将至经典RTS实现随时随地畅玩近日,有人利用H5与JAVA技术将《星际争霸》的经典版本移植为网页游戏,使玩家可以轻松畅玩该游戏,只需要点开网页就可以重温当年的记忆。 当然,将一款正常的软件变成一个网页游戏并非那么简单,除了将C语言、C++等程序语言转化成网页可以用的JAVA语言,在操作过程中还有相当多的问题出现,不过现在已经有了测试版的截图放出。http://www.81.cn/jsyx/2015-09/09/content_6672961.htm
17.CSDN免积分下载免费下载网页版csdn下载器图片去底【CSDN下载】2024年 CSDN免积分下载网页版 最新干货 csdn下载网页,如何在csdn免费下载资源,csdn下载链接破解。2023年 CSDN资源免积分下载 最新干货 教你低成本下载想要的资源,免积分下载网页版,输入CSDN下载页面地址即可下载资源。 龙迹之城骷髅传奇自动挂机脚本辅助免费下载试用 https://www.jerrycoding.com/