Нужно ли несколько объектов OpenSSL Bio для параллельных запросов? - PullRequest
1 голос
/ 31 марта 2019

Я использую API-интерфейс BIO OpenSSL для отправки HTTPS-запросов. Мне нужно отправить 2+ запросов одновременно (не последовательно) в одно и то же место назначения через HTTP / 1.1 через неблокирующий сокет .

У меня есть запросы, работающие, но они отправляются / обрабатываются последовательно , а не одновременно .

Например, в настоящее время при использовании одного биообъекта и одновременной отправке нескольких запросов на поддельный API, который имеет встроенную 5-секундную задержку перед отправкой ответа, я получаю ответы через 5 с, 10 с, 15 с, 20 с и т. д. Указывающие запросы обрабатываются последовательно. (Сервер может обрабатывать и отвечать на несколько запросов от разных клиентов с постоянной задержкой в ​​5 секунд, подтверждая, что это связано с кодом клиента.)

Вопрос:

  • Нужно ли использовать один биообъект BIO* bio; для запроса, который я хочу отправить одновременно? Или есть другой способ использовать Bio для одновременной отправки и обработки запросов?

1 Ответ

0 голосов
/ 31 марта 2019

Объекты BIO имеют ту же безопасность потоков, что и объекты SSL .т.е. один контекст SSL НЕ является потокобезопасным.Вы можете иметь несколько контекстов SSL, работающих одновременно, но не в одном и том же контексте SSL.

Таким образом, если вам действительно нужно иметь несколько HTTPS-запросов в полете одновременно, вам нужно иметь несколько сокетов (по одному для каждого одновременного запроса).Каждый сокет будет иметь свой собственный контекст SSL и собственный контекст BIO.

Я бы просто реализовал сокет на поток.Лучшим (и, возможно, более сложным) будет сокет для каждого процессора, где у вас есть какой-то способ сериализации доступа к контексту SSL, чтобы они не перекрывались (например, увеличивайте asio strand на поток ssl)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...