IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Websocket++库分帧发送message_ptr参数设置 -> 正文阅读

[网络协议]Websocket++库分帧发送message_ptr参数设置

Websocket++是一个封装了Websocket协议的C++库,当我们想使用websocket协议的分帧传输时,会用到的发送接口:其原型如下

template <typename connection, typename config>
void endpoint<connection,config>::send(connection_hdl hdl, message_ptr msg, lib::error_code & ec)
{
    connection_ptr con = get_con_from_hdl(hdl,ec);
    if (ec) {return;}
    ec = con->send(msg);
}

template <typename connection, typename config>
void endpoint<connection,config>::send(connection_hdl hdl, message_ptr msg) 
{
    lib::error_code ec;
    send(hdl,msg,ec);
    if (ec) { throw exception(ec); }
}

message_ptr msg这个参数比较难搞,这是一个指针,可我们往往不清楚如何给它创建对象。

平时我们给指针创建对象是这样做的:

char* p1 = new char;

int* p2 = new int;

可是,如果

message_ptr msg = new message_ptr;

这是错误的,创建它的对象很麻烦,正确创建方法:

typedef websocketpp::client<websocketpp::config::asio_tls_client> client;	
typedef websocketpp::message_buffer::message<websocketpp::message_buffer::alloc::con_msg_manager>	message_type;
typedef websocketpp::message_buffer::alloc::con_msg_manager<message_type>	con_msg_man_type;
con_msg_man_type::ptr manager = websocketpp::lib::make_shared<con_msg_man_type>();
client::message_ptr msg = manager->get_message(websocketpp::frame::opcode::BINARY, 1024);

实际使用情况:

注意我例子中使用的是TLS/SSL加密方式:

#include <websocketpp/config/asio_client.hpp>

typedef websocketpp::client<websocketpp::config::asio_tls_client> client;

大家一般都是用非加密的:

#include <websocketpp/config/asio_no_tls_client.hpp>

typedef websocketpp::client<websocketpp::config::asio_client> client;


//如下流程是client端发送给server端的一个字符串信息“hello”

typedef websocketpp::client<websocketpp::config::asio_tls_client> client;	
typedef websocketpp::message_buffer::message<websocketpp::message_buffer::alloc::con_msg_manager>	message_type;
typedef websocketpp::message_buffer::alloc::con_msg_manager<message_type>	con_msg_man_type;
con_msg_man_type::ptr manager = websocketpp::lib::make_shared<con_msg_man_type>();

//创建client::message_ptr对象,容量初始大小为1024(可随便设置),用于设置数据帧的基本参数
client::message_ptr msg = manager->get_message(websocketpp::frame::opcode::BINARY, 1024);

//每个数据帧一般只设置这三个参数即可,分帧和不分帧只有fin和opcode会有区别	,
//不分帧:fin=true,opcode!=0;(默认每一帧大小在32MB以内,可以更改:m_pEndpoint->set_max_message_size(32000000))
//分帧:第一帧fin=false,opcode!=0,中间帧fin=false,opcode=0,最后一帧fin=true,opcode=0;(默认所有分帧总和在32MB以内,因为发送端分帧,但是接收端是接收完所有分帧,且合并成一帧,才会触发接收回调函数on_message())
msg->set_fin(true);    //true:最后一帧数据  false:还有下一帧数据
msg->set_opcode(websocketpp::frame::opcode::value::BINARY);    //数据格式是二进制,  CONTINUATION=0x0,TEXT=0x1,BINARY=0x2
msg->set_payload("hello"); // 发送数据的内容

//调用发送接口,发送数据帧
m_pEndpoint->send(m_Server_hdl, msg);

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:17:01  更:2022-05-21 19:18:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:31:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码