2308协程超传客户用法

原文

协超客使用文档

基本用法

如何包含协程超传客户
协程超传客户是雅库的子库,雅库仅头的,下载雅库库之后,在自己的工程中包含目录:

包含目录(包含)
包含目录(包含/雅兰/第三方)

如果是g++编译器还需要启用C++20协程:

(c造c++编译器标识 串等"GNU")(c造c++标志"${c造c++标志}-f协程")#-f树-超级并-向量化协程置(c造c++标志发布"${c造c++标志发布}-f不-树-超级并-向量化")结束如果()

最后在工程里包含协程超传客户的头文件即可:

#包含<io流>
#包含"雅兰/协程超传/协程超传客户.h++"
整 主(){协程超传::协程超传客户 客户{};::串 资标符="cn.兵搜.组模";动 结果=客户.(资标符);(结果.网错误){::输出<<结果.网错误.消息()<<"\n";}::输出<<结果.状态<<"\n";结果=客户.提交(资标符,"你好",协程超传::请求内容类型::数格);::输出<<结果.状态<<"\n";}

超传同步请求

超传同步请求接口

//`超传`响应的结构
//`参数,网错误`网络错误,默认为空
//`参数,状态`,`超传响应的状态码,正常一般为`200`
//`参数,响应体`,`超传`响应`体`,类型为`标::串视`,如果想保存到后面`延迟`处理则需要走`响应体`拷贝`
//`参数,响应头`,`超传`响应头`
//`参数,文件尾`,`超传`响应是否结束,一般请求`文件尾`为`真`,`文件尾`对文件下载才有意义,下载的中间过程中`文件尾`为`假`,最后包时`文件尾`才为`真`)
构 响应数据{::错误码 网错误;整 状态;::串视 响应体;::向量<::<::,::>>响应头;极 文件尾;
};
//参数:资标符,超传资标符`,如`万维网.例子.组模`
响应数据 取(::串 资标符);
枚 类 请求内容类型{超文本,数格,文字,,多段,区间,表单网径编码,八位组流,标记语,};
//`参数,资标符,超传资标符`,如`万维网.例子.组模`
//`参数,内容,超传`请求的`体`
//`参数,内容类型`,`超传`请求的`内容类型`,如`数格,文字`等类型
响应数据 提交(::串 资标符,::串 内容,请求内容类型 内容类型);

超传同步请求的用法

一行代码即可简单请求网站:

协程超传客户 客户{};
动 结果=客户.("万维网.例子.组模");(结果.网错误){::输出<<网错误.消息()<<"\n";;
}(结果.状态==200){::输出<<结果.响应体<<"\n";
}

请求返回后,需要检查是否有网络错误和状态码,如果都正常则可处理取得的响应和响应头了.

空 测试同步客户(){{::串 资标符="万维网.百度.组模";协程超传客户 客户{};动 结果=客户.(资标符);断定(!结果.网错误);打印(结果.响应体);结果=客户.提交(资标符,"你好",请求内容类型::数格);打印(结果.响应体);}{协程超传客户 客户{};::串 资标符="cn.兵搜.组模";动 结果=客户.(资标符);断定(!结果.网错误);打印(结果.响应体);结果=客户.提交(资标符,"你好",请求内容类型::数格);打印(结果.响应体);}
}

超传异步请求接口

简单异步::协程::<响应数据>异步取(::串 资标符);
简单异步::协程::<响应数据>异步提交(::串 资标符,::串 内容,请求内容类型 内容类型);

异步取接口参数一样,异步提交提交接口参数一样,只是返回类型不同,同步接口返回的是普通响应数据,而异步接口返回的是个协程对象.
事实上,同步接口内部就是调用对应协程接口,用法上接近,多了个协待操作.
事实上可把任意异步协程接口通过同步等待方法同步阻塞调用方式,来转换成同步接口,以同步接口为例:

响应数据 取(::串 资标符){中 简单异步::协程::同步等待(异步取(::移动(资标符)));
}

同步请求示例:

简单异步::协程::<>异步测试客户(){::串 资标符="万维网.百度.组模";{协程超传客户 客户{};动 数据=协待 客户.异步取(资标符);打印(数据.状态);数据=协待 客户.异步取(资标符);打印(数据.状态);数据=协待 客户.异步提交(资标符,"你好",请求内容类型::);打印(数据.状态);}
}

超传安请求

发起超传安请求之前确保已安装了开安,并开启新那特允许安套层预编译宏:

选项(新那特允许安套层"允许安套层")

客户只需要调用初化安套层方法即可,之后便可和之前一样发起超传安请求了.

常 整 未验证=安套层无验证;
常 整 验证端=安套层验证端;
常 整 无端认证则验证失败=安套层无端认证则验证失败;
常 整 验证一次客户=安套层验证客户一次;
//`参数,基路径安套层`证书所在路径
//`参数,认证文件安套层`证书名
//`参数,验证模式`证书校验模式,默认不校验
//`参数,领域`校验域名
//`中,安套层`,是否成功初化极 初化安套层(常 标::&基路径="",常 标::&认证文件="",整 验证模式=异网::安套层::未验证,常 标::&领域="本地主机");
#如定义 新那特允许安套层空 测试协程超传客户(){协程超传客户 客户{};客户.初化安套层("../../包含/新那","服务器.c运");动 数据=客户.("万维网.兵搜.组模");::输出<<数据.响应体<<"\n";数据=客户.("万维网.兵搜.组模");::输出<<数据.响应体<<"\n";::串 资标符2="万维网.百度.组模";::串 资标符3="cn.兵搜.组模";协程超传客户 客户{};客户.初化安套层("../../包含/新那","服务器.c运");数据=协待 客户.异步取(资标符2);打印(数据.状态);数据=协待 客户.异步取(资标符3);打印(数据.状态);}
#结束如果

如果没有安套层证书,则不填初化安套层();参数.

超传先连接再请求

前面介绍的取/提交接口传入资标符,在函数内部会自动去连接服务器并发请求,一次完成了连接和请求,如果想分开连接和请求,则可先调用连接接口再调用异步取接口.

如果主机已通过请求连接成功之后,后面发请求时只传入路径而不用传入完整的路径,这样可获得更好的性能,协程超传客户对已连接的主机,传入路径时不会再重复去解析已解析过的资标符.

简单异步::协程::<>异步测试客户(){::串 资标符="万维网.百度.组模";{协程超传客户 客户{};//先连接动 数据=协待 客户.连接(资标符);打印(数据.状态);//后面再发送具体的请求数据=协待 客户.异步取(资标符);打印(数据.状态);//对已连接的`主机`,这里可只传入`路径`,不需要传入完整的`资标符`数据=协待 客户.异步提交("/","你好",请求内容类型::);打印(数据.状态);}
}

重连超传

超传请求失败之后,该超传客户是禁止复用的,因为已关闭了内部的套接字,除非调用重连去重连主机,这样就可复用超传客户了.

协程超传客户 1客户{};//连接非法的`资标符`会失败r=简单异步::协程::同步等待(1客户.异步超传连接("超传://万维网.坏网径.组模"));检查(r.状态!=200);//通过重连复用`1客户`r=简单异步::协程::同步等待(1客户.重连("cn.兵搜.组模"));检查(1客户.取主机()=="cn.兵搜.组模");检查(1客户.取端口()=="超传");检查(r.状态==200);

其它超传接口

超传方法
枚 类 超传方法{未知,,,,提交,,补丁,连接,选项,跟踪
};

协程超传客户提供了这些超传方法对应的请求接口:

简单异步::协程::<响应数据>异步删(::串 资标符,::串 内容,请求内容类型 内容类型);
简单异步::协程::<响应数据>异步取(::串 资标符);
简单异步::协程::<响应数据>异步头(::串 资标符);
简单异步::协程::<响应数据>异步提交(::串 资标符,::串 内容,请求内容类型 内容类型);
简单异步::协程::<响应数据>异步放(::串 资标符,::串 内容,请求内容类型 内容类型);
简单异步::协程::<响应数据>异步补丁(::串 资标符);
简单异步::协程::<响应数据>异步超传连接(::串 资标符);
简单异步::协程::<响应数据>异步选项(::串 资标符);
简单异步::协程::<响应数据>异步跟踪(::串 资标符);

注意,异步超传连接接口不是异步连接接口,它是超传方法::连接对应的接口,真正的异步连接接口连接在前面.

上传下载文件

除了超传方法对应的接口之外,协程超传客户还提供了常用文件上传和下载接口.

格式上传

<型名 S,型名 串>
简单异步::协程::<响应数据>异步上传块(S 资标符,超传方法 方法,串 文件名,::无序映<::,::>={});

方法一般是提交,文件名是带路径的文件名,是请求头,填好这些参数后,协程超传客户会自动上传文件分块到服务器,直到全部上传完成之后才协中,中间上传出错也会返回.

碎片每块的大小默认为1MB,如果想修改分块大小可通过置最大单部分大小接口去设置大小,或通过配置里面的最大单部分大小配置项去设置.

多部分格式上传

多段上传有两个接口,一个是一步上传,一个是两步上传.

一步上传接口

简单异步::协程::<响应数据>异步上传多段(::串 资标符,::串 名,::串 文件名);

多段里面的参数,文件名需要上传的带路径的文件名.客户会自动上传文件分片,分片大小的设置和之前介绍的最大单部分大小一样,默认分片大小是1MB.

一步上传接口适合纯粹上传文件用,如果要上传多个文件,或既有也有文件时,就需要两步上传接口.

两步上传接口

//设置要上传的串`键-值`
极 加串部分(::串 名,::串 内容);
//设置要上传的文件
极 加文件部分(::串 名,::串 文件名);
//上传
简单异步::协程::<响应数据>异步上传多段(::串 资标符);

两步上传,第一步是准备要上传的串或文件,第二步上传;

::串 资标符="127.0.0.1:8090/多段";协程超传客户 客户{};客户.加串部分("你好","世界");客户.加串部分("键","值");动 结果=简单异步::协程::同步等待(客户.异步上传多段(资标符));

格式下载

简单异步::协程::<响应数据>异步下载(::串 资标符,::串 文件名,::串 区间="");

传入资标符和本地要保存的带路径文件名即可,客户会自动下载并保存到文件中,直到全部下载完成.

区间格式下载

区间下载接口和碎片下载接口相同,需要填写区间:

协程超传客户 客户{};::串 资标符="独特好东西.从不安套层.组模/喜爱图标.图标";::串 文件名="测试.文本";::错误码 ec{};::文系::移除(文件名,ec);响应数据 结果=简单异步::协程::同步等待(客户.异步下载(资标符,文件名,"1-10,11-16"));::串 文件名1="测试1.文本";::错误码 ec{};::文系::移除(文件名1,ec);响应数据 结果=简单异步::协程::同步等待(客户.异步下载(资标符,文件名1,"1-10"));

区间"m-n,x-y,..."的格式填写,下载的内容保存会到文件里.

下载块\区间格式到内存

如果下载的数据量比较小,不想放到文件里,想放到内存里,则直接使用异步取,异步提交等接口即可,碎片\区间等下载数据保存会到响应数据.响应体中.

超传客户配置项

客户配置项:

构 配置{//连接超时时间,默认8秒::可选<::时间::稳定钟::时长>连接超时时长;//请求超时时间,默认`60`秒(包括连接时间和等待请求响应的时间)::可选<::时间::稳定钟::时长>请求超时时长;//`网套`的安全`键`::串 安钥;//`碎片`下载`/多段`下载`,碎片`上传`/多段`上传时文件分片大小,默认`1MB`大小型 最大单部分大小;//`超传`代理相关的设置::串 代理主机;::串 代理端口;::串 代理认证用户名;::串 代理认证密码;::串 代理认证令牌;//是否启用`无延时传控`极 允许无延时传控;
#如定义 新那特允许安套层//是否使用`安套层`极 用安套层=;//`安套层`证书路径::串 基路径;//`安套层`证书名::串 认证文件;//`安套层`校验模式整 验证模式;//`安套层`校验域名::串 领域;
#结束如果};

配置项设置之后,调用初化配置设置超传客户的参数.

协程超传客户 客户{};
协程超传客户::配置 配置{.请求超时时长=60s};
客户.初化配置(配置);
动 r=简单异步::协程::同步等待(客户.异步超传连接("万维网.百度.组模"));
网套

网套的支持需要3步:
1,设置读网套数据的回调函数;
2,连接服务器;
3,发送网套数据;

设置网套读数据接口:

空 网套消息时(::函数<(响应数据)>网套消息时);

网套连接服务器接口:

简单异步::协程::<>异步网套连接(::串 资标符);

网套发送数据接口:

枚 操作码:::8{内容=0,文字=1,二元=2,接收3=3,接收4=4,接收5=5,接收6=6,接收7=7,关闭=8,=9,乒乓=10,crsvb=11,crsvc=12,crsvd=13,crsve=14,crsvf=15
};
//发送`网套`数据
//`参数,消息`要发送的`网套`数据
//`参数,需要掩码`是否需要对数据`掩码`,默认会`掩码
//`参数,操作操作码`一般为`文字,二元`或`关闭`等类型
简单异步::协程::<响应数据>异步发送网套(::串 消息,极 需要掩码=,操作码 操作=操作码::文字);

网套示例:

协程超传客户 客户;//连接`网套`服务器简单异步::协程::同步等待(客户.异步网套连接("ws://本地主机:8090"));::串 发送串(长度,'a');//设置读数据回调客户.网套消息时([&,发送串](响应数据 数据){(数据.网错误){::输出<<"窗套消息错误"<<数据.网错误.消息()<<"\n";;}::输出<<"ws 消息长度:"<<数据.响应体.大小()<<::行尾;要求(数据.响应体.大小()==发送串.大小());检查(数据.响应体==发送串);});//发送`网套`数据简单异步::协程::同步等待(客户.异步发送网套(发送串));

线程模型

协程超传客户默认是共享一个全局"线程池",该"线程池"准确来说是一个io环境池,协程超传客户的线程模型是一个客户一个io环境,io环境客户是一对多的关系.
io环境池默认的线程数是机器的核数,如果想控制的线程数可调用协程io::取全局执行器(池大小)去设置总的线程数.
客户不是线安的,要确保只有一个线程在调用客户,如果想并发请求服务端有两个方式:
方式一:
创建多个客户去请求服务端,全局的"线程池",会用轮询的方式为每个客户分配一个线程.
方式二:
通过多个协程去请求服务端:

协程超传客户 客户;::向量<简单异步::协程::<响应数据>>未来;(整 i=0;i<10;++i){未来.压后(客户.异步取("万维网.百度.组模/"));}动 出=协待 简单异步::协程::收集所有(::移动(未来));(&:){动 结果=.();检查(结果.状态==200);}

设置解析超传响应的最大数量

默认,最多可解析100超传头,如果想解析更多超传头需要定义一个宏新那最大超传头字段大小,通过它来设置解析的最大数,在包含客户头文件之前定义:

#定义 新那最大超传头字段大小 200//解析的最大`头`数设置为`200`

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

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

相关文章

【编程题】有效三角形的个数

文章目录 一、题目二、算法讲解三、题目链接四、补充 一、题目 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例1&#xff1a; 输入: nums [2,2,3,4] 输出: 3 **解释:**有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 …

基于 kernel 4.0 初始kmalloc

kmalloc 系列函数是驱动者常用来向内核大管家申请内存的API&#xff0c;今天抽空扒一扒它是怎么工作的&#xff1b;首先看看它的原型 1. kmalloc () 函数 static __always_inline void *kmalloc(size_t size, gfp_t flags) {if (__builtin_constant_p(size)) {if (size > …

openssl 加密(encrypt)、解密(decrypt)、签名(sign)、验证(verify)

一、使用openssl rsautl 进行加密、解密、签名、验证 [kyzjjyyzc-zjjcs04 openssl]$ openssl rsautl --help Usage: rsautl [options] -in file input file -out file output file -inkey file input key -keyform arg private key format - default PEM …

【Spring Boot】SpringBoot完整实现社交网站系统

一个完整的社交网站系统需要涉及到用户登录、发布动态、关注、评论、私信等各方面。这里提供一个简单的实现示例&#xff0c;供参考。 前端代码 前端使用Vue框架&#xff0c;以下是部分代码示例&#xff1a; 登录页&#xff1a; <template><div><input type…

论文阅读:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks

前言 要弄清MAML怎么做&#xff0c;为什么这么做&#xff0c;就要看懂这两张图。先说MAML**在做什么&#xff1f;**它是打着Mate-Learing的旗号干的是few-shot multi-task Learning的事情。具体而言就是想训练一个模型能够使用很少的新样本&#xff0c;快速适应新的任务。 定…

pdf转ppt软件哪个好用?推荐一个好用的pdf转ppt软件

在日常工作和学习中&#xff0c;我们经常会遇到需要将PDF文件转换为PPT格式的情况。PDF格式的文件通常用于展示和保留文档的原始格式&#xff0c;而PPT格式则更适合用于演示和展示。为了满足这一需求&#xff0c;许多软件提供了PDF转PPT的功能&#xff0c;使我们能够方便地将PD…

vscode免密连远程

一、本地操作 ssh-keygen cd ~/.ssh ls // config为安装vscode远程插件后的信息 // id_rsa为本地私钥 // id_rsa.pub为本地公钥 vim config // 在User下增加一行本地私钥地址 IdentityFile "/Users/xuerui/.ssh/id_rsa"二、远程 cd ~/.ssh vim authorized_keys //…

C语言暑假刷题冲刺篇——day5

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练✨相关专栏&#xff1a;代码小游戏、C语言初阶、C语言进阶&#x1f91d;希望作者…

【CSS】CSS 特性 ( CSS 优先级 | 优先级引入 | 选择器基本权重 )

一、CSS 优先级 1、优先级引入 定义 CSS 样式时 , 可能出现 多个 类型相同的 规则 定义在 同一个元素上 , 如果 CSS 选择器 相同 , 执行 CSS 层叠性 , 根据 就近原则 选择执行的样式 , 如 : 出现两个 div 标签选择器 , 都设置 color 文本颜色 ; <style>div {color: re…

精准高效农业作业,植保无人机显身手

中国作为农业大国&#xff0c;拥有约18亿亩的农田&#xff0c;每年都需要进行种子喷洒和农药施用等农业作业&#xff0c;对于普通农户来说&#xff0c;这是一项耗时耗力的工程&#xff0c;同时&#xff0c;人工喷洒农药极易造成农药慢性中毒&#xff0c;对农民的身体健康产生极…

Redis——急速安装并设置自启(CentOS)

现状 对于开发人员来说&#xff0c;部署服务器环境并不是一个高频操作。所以就导致绝大部分开发人员不会花太多时间去学习记忆&#xff0c;而是直接百度&#xff08;有一些同学可能连链接都懒得收藏&#xff09;。所以到了部署环境的时候就头疼&#xff0c;甚至是抗拒。除了每次…

k8s 安装istio (一)

前置条件 已经完成 K8S安装过程十&#xff1a;Kubernetes CNI插件与CoreDNS服务部署 部署 istio 服务网格与 Ingress 服务用到了 helm 与 kubectl 这两个命令行工具&#xff0c;这个命令行工具依赖 ~/.kube/config 这个配置文件&#xff0c;目前只在 kubernetes master 节点中…

web前端开发中的响应式布局设计是什么意思?

响应式布局是指网页设计和开发中的一种技术方法&#xff0c;旨在使网页能够在不同大小的屏幕和设备上都能良好地显示和交互。这种方法使得网页可以自动适应不同的屏幕尺寸&#xff0c;包括桌面电脑、平板电脑和手机等。 在Web前端开发中&#xff0c;响应式布局通常使用CSS&…

随记-Kibana Dev Tools,ES 增删改查 索引,Document

索引 创建索引 创建索引 PUT index_test创建索引 并 修改分片信息 # 创建索引 并 修改分片信息 PUT index_test2 { # 必须换行, PUT XXX 必须独占一行&#xff0c;类似的 其他请求也需要独占一行 "settings": {"number_of_shards": 1, # 主分片"…

bug复刻,解决方案---在改变div层级关系时,导致传参失败

问题描述&#xff1a; 在优化页面时&#xff0c;为了实现网页顶部遮挡效果&#xff08;内容滚动&#xff0c;顶部导航栏不随着一起滚动&#xff0c;并且覆盖&#xff09;&#xff0c;做法是将内容都放在一个div里面&#xff0c;为这个新的div设置样式&#xff0c;margin-top w…

c++ qt--事件过滤(第七部分)

c qt–事件过滤&#xff08;第七部分&#xff09; 一.为什么要用事件过滤 上一篇博客中我们用到了事件来进行一些更加细致的操作&#xff0c;如监控鼠标的按下与抬起&#xff0c;但是我们发现如果有很多的组件那每个组件都要创建一个类&#xff0c;这样就显得很麻烦&#xff…

GO语言:Worker Pools线程池、Select语句、Metex互斥锁详细示例教程

目录标题 一、Buffered Channels and Worker Pools1. Goroutine and Channel Example 线程和通道示例2. Deadlock 死锁3. Closing buffered channels 关闭通道4. Length vs Capacity 长度和容量5. WaitGroup6. Worker Pool Implementation 线程池 二、Select1. Example2. Defau…

IO进程线程,文件与目录,实现linux任意目录下ls -la

注意文件的名字、路径是如何输入的。 函数opendir打开目录&#xff0c;struct dirent&#xff0c;struct stat这些结构体的含义。 readdir()函数是一个用于读取目录内容的系统调用或库函数&#xff0c;在类Unix操作系统中&#xff08;如Linux&#xff09;广泛使用。它用于遍历…

python爬虫10:selenium库

python爬虫10&#xff1a;selenium库 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产…

leetcode算法题--复杂链表的复制

原题链接&#xff1a;https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof/description/?envTypestudy-plan-v2&envIdcoding-interviews 感觉一开始想到的办法还是比较笨 /*** Definition for a Node.* type Node struct {* Val int* Next *Node* …