当前位置: 首页 > wzjs >正文

杨凌区住房和城乡建设局网站南京做网站的客户电话

杨凌区住房和城乡建设局网站,南京做网站的客户电话,湖州网站建设官网,网站后台重置密码怎么做目录 1.websocket协议 1.1websocket协议诞生的原因 1.2websocket VS http 1.3websocket协议报头 2.websocketpp搭建简单服务器 1.websocket协议 1.1websocket协议诞生的原因 传统的 HTTP 协议采用的是请求 - 响应的单向通信模式,即客户端必须主动发起请求&#xff…

目录

1.websocket协议

1.1websocket协议诞生的原因

1.2websocket VS http

1.3websocket协议报头

2.websocketpp搭建简单服务器


1.websocket协议

1.1websocket协议诞生的原因

传统的 HTTP 协议采用的是请求 - 响应的单向通信模式,即客户端必须主动发起请求,服务器才能做出响应。在需要实时更新数据的场景下,如在线聊天、实时股票行情显示等,客户端为了获取最新信息,不得不频繁地向服务器发送请求,这种方式会造成大量不必要的网络流量和服务器负载,同时也无法保证数据的实时性。

1.2websocket VS http

1.3websocket协议报头

websocket协议通常是由http协议切换而来的。

客户端会向服务器发送一个,含有websocket信息的请求。

GET /chat HTTP/1.1
Host: example.com:8080
Upgrade: websocket //表明客户端希望将当前的 HTTP 连接升级为 WebSocket 连接
Connection: Upgrade //告知服务器将http协议切换为websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== 
Sec-WebSocket-Version: 13
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Upgrade: websocket 表明客户端希望将当前的 HTTP 连接升级为 WebSocket 连接

Connection: Upgrade 告知服务器需要进行协议升级。

Sec-WebSocket-Key:一个 Base64 编码的随机值,用于防止普通的 HTTP 连接被误当作 WebSocket 连接。服务器会使用这个值进行计算并在响应中返回一个加密的键,以此验证连接的合法性。

Sec-WebSocket-Version:指定客户端支持的 WebSocket 协议版本,目前常用的版本是 13。

服务器收到客户端的升级请求后,如果同意升级,会返回一个状态码为 101 的响应,并包含相应的报头信息。

FIN:表示这是否是消息的最后一帧。

如果为 1,则表示该消息已完整传输;如果为 0,则表示后续还有其他帧。

Opcode:用于指示帧的类型。

常见的操作码包括 0x0(延续帧)、0x1(文本帧)、0x2(二进制帧)、0x8(关闭帧)、0x9(Ping 帧)和 0xA(Pong 帧)。

Mask:表示是否对数据进行掩码处理。

客户端发送的帧必须进行掩码处理,服务器发送的帧不能进行掩码处理。

Payload length:表示负载数据的长度。

如果值在 0 - 125 之间,则直接使用 7 位表示;如果为 126,则接下来的 16 位表示负载长度;如果为 127,则接下来的 64 位表示负载长度

Mask-Key:当mask为1时存在,长度为4字节,

解码规则:DECODED[i]=ENCODED[i]^MASK[i %4]

Payloaddata:报文携带的载荷数据

2.websocketpp搭建简单服务器

#include <iostream>
#include <websocketpp/server.hpp>
#include <websocketpp/config/asio_no_tls.hpp>
#include <string>//websocketpp::server<websocketpp::config::asio> 指定asio网络库作为websocket的服务器
typedef websocketpp::server<websocketpp::config::asio> ws;
typedef websocketpp::server<websocketpp::config::asio>::message_ptr message_ptr;
typedef websocketpp::server<websocketpp::config::asio>::connection_ptr connection_ptr;//websocketpp::connection_hdl conn 是一个表示连接的句柄,本身没有什么意义
void httpCallBack(ws *server, websocketpp::connection_hdl conn) 
{std::cout <<"get a http request " << std::endl;connection_ptr connPtr = server->get_con_from_hdl(conn);// 通过句柄获取一个真正的连接std::string response = R"(<html><p>hello word<p></html>)";connPtr->set_body(response);connPtr->set_status(websocketpp::http::status_code::ok);
}void openCallBack(ws *server, websocketpp::connection_hdl conn)
{std::cout <<"get a new connection " << std::endl;
}void closeCallBack(ws *server, websocketpp::connection_hdl conn)
{std::cout <<"a connection closed" << std::endl;
}void messageCallBack(ws *server, websocketpp::connection_hdl conn, message_ptr message)
{std::cout << "a message come" << std::endl;server->send(conn, message->get_payload(),websocketpp::frame::opcode::text);
}int main()
{//1.创建websocket服务实例ws server;//2.设置日志等级server.set_access_channels(websocketpp::log::alevel::none);//3.初始化asioserver.init_asio();//4.设置地址重用server.set_reuse_addr(true);//5.设置回调函数//设置http请求的回调函数server.set_http_handler(std::bind(&httpCallBack, &server, std::placeholders::_1));//设置websocket请求的回调函数server.set_open_handler(std::bind(&openCallBack, &server, std::placeholders::_1)); //建立连接成功的回调server.set_close_handler(std::bind(&closeCallBack, &server, std::placeholders::_1));//连接关闭的回调server.set_message_handler(std::bind(&messageCallBack, &server, std::placeholders::_1, std::placeholders::_2));//消息到来的回调//6.设置端口server.listen(8080);//7.接受连接server.start_accept();//8.运行服务server.run();return 0;
}
websocket:websocket.ccg++ -o $@ $^ -std=c++11 -lpthread -lboost_system.PHONY:clean
clean:rm -rf websocket


文章转载自:

http://cMLsgQ1T.ysskn.cn
http://eA3V7frb.ysskn.cn
http://V1J1Qq9u.ysskn.cn
http://Q2DF4ub7.ysskn.cn
http://9R0DrR4y.ysskn.cn
http://UtclPwFl.ysskn.cn
http://zq4sduR8.ysskn.cn
http://TPExpMZM.ysskn.cn
http://64dc2rFj.ysskn.cn
http://XnMlgY8n.ysskn.cn
http://RnyQoUzl.ysskn.cn
http://yWISMV3i.ysskn.cn
http://bEsFgJnC.ysskn.cn
http://OoZumtW5.ysskn.cn
http://CptdqXVo.ysskn.cn
http://wV6gbrDs.ysskn.cn
http://KK9WDkK0.ysskn.cn
http://tKBxs40U.ysskn.cn
http://LWbt1JGL.ysskn.cn
http://ucgqyGaP.ysskn.cn
http://6IV1TTBk.ysskn.cn
http://h0JjiIEF.ysskn.cn
http://R8tiKmmb.ysskn.cn
http://Bof8GOpy.ysskn.cn
http://drUsaF54.ysskn.cn
http://nQKujYyD.ysskn.cn
http://tnfvezt6.ysskn.cn
http://oxempbaE.ysskn.cn
http://Kh22kzmx.ysskn.cn
http://niP3A46S.ysskn.cn
http://www.dtcms.com/wzjs/637033.html

相关文章:

  • a做爰网站自己建的网站有乱码
  • 菲律宾做网站好吗免费创建个人网站
  • 潍坊公司网站模板建站网络营销论文5000字
  • 婴儿用品网站模板微信官方商城小程序
  • 孝感网站建设效果南阳做网站seo的
  • 网站建设调查通知wordpress 众筹
  • 陶然亭网站建设旅游网站建设需求说明书
  • 景点网站开发积极意义怎样建设自己网站
  • 网站设计概述500字建设社区网站有什么借鉴之处
  • led动态视频网站建设两个域名同时指向一个网站
  • 为什么网站显示正在建设哪个网站做五金冲压的
  • 建立网站的主要流程有哪些步骤asp.net 4.0网站开发 下载
  • 经典网页传奇西安网站关键词优化费用
  • 建设教育网站怎么样千库网会员
  • 万站霸屏vs网站制作
  • 长春 网站 设计wordpress最近浏览
  • 如何进行网站分析企业宣传网站建设需求说明书
  • 不起眼的暴利小生意wordpress seo优化
  • 全屋整装家装佛山网站建设乐云seo在线制作
  • 好的设计logo网站社交网站的建设现状
  • 国际网站建设的目的哈尔滨市建设厅网站
  • 湖南省交通建设质安监督局网站wordpress 删除 加载中
  • 上海集团网站建设价格想在百度做网站
  • 官方网站的重要性中国门户网站排行
  • 网站开发经理岗位职责北京招聘网站开发
  • 濮阳建站公司哪个好网站开发流程有哪些
  • 建设网上银行官方网站官方网站开发公司排名
  • 网站建设首选沈阳高端网站建设做网站最简单的工具
  • 亚马逊网站开发设计家庭网络组网方案
  • 室内设计装修网站h5商城网站建站