是否需要多个 OpenSSL 生物对象来允许并行请求?

Are multiple OpenSSL Bio objects needed to allow parallel requests?

本文关键字:许并行 并行 请求 对象 OpenSSL 是否      更新时间:2023-10-16

我正在使用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链)