是否需要多个 OpenSSL 生物对象来允许并行请求?
Are multiple OpenSSL Bio objects needed to allow parallel requests?
我正在使用OpenSSL的BIOAPI发送HTTPS请求。我需要通过非阻塞套接字通过HTTP/1.1同时(不是串行)向同一目标发送 2+ 个请求。
我有请求在工作,但它们是串行发送/处理的,而不是同时发送/处理的。
例如,目前,当使用一个 Bio 对象并同时向在发送响应之前具有内置 5 秒延迟的模拟 API 发送多个请求时,我在 5 秒、10 秒、15 秒、20 秒等后收到响应。 指示请求是串行处理的。 (服务器可以处理和响应来自不同客户端的多个请求,延迟一致的 5 秒,确认这与客户端代码相关。
问题:
- 我是否需要在要同时发送的每个请求中使用一个 Bio 对象
BIO* bio;
?或者是否有其他方法可以使用Bio同时发送和处理请求?
BIO 对象与 SSL 对象具有相同的线程安全性。 即单个 SSL 上下文不是线程安全的。 您可以同时运行多个 SSL 上下文,但不能在同一 SSL 上下文中运行。
因此,如果您确实需要同时有多个 HTTPS 请求在运行中,则需要有多个套接字(每个同时请求一个套接字)。 每个套接字都有自己的 SSL 上下文和自己的 BIO 上下文。
我简单的实现是每个线程一个套接字。 一个更好的(也许是更复杂的)是每个CPU的插槽,您可以在其中序列化对SSL上下文的访问,以便它们不会重叠(例如,每个SSL流的增强asio链)
相关文章:
- C++17中的并行执行策略
- 并行用于C++17中数组索引范围内的循环
- 如何在Elixir中调用递归函数并行
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 遍历并行数组以确定C++中的最大数字
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 并行标准::复制复杂性
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 如何在 C++17 STL 并行算法中处理调度?
- OpenMP 与有序和关键指令并行
- OpenMP for 循环并行性问题
- 两个连续的 OpenMP 并行区域会相互减慢速度
- C++17:如何在并行 STL 中获取工作项的索引
- 如何使用 OpenMP 并行化最近邻搜索
- 如何使用 winsock2 实现与 c++ 的多个并行连接?