SSL рукопожатие и Gevent - PullRequest
       21

SSL рукопожатие и Gevent

0 голосов
/ 10 октября 2018

Чтобы уменьшить задержку, мы попытались использовать gevent в нашей программе.Тем не менее, использование acyncio казалось утомительным, так как нам нужно было переписать много кода.

Но использование gevent привело к множеству странных ошибок, таких как [SSL Handshake failed].После некоторого копания мы узнали, что наш клиентский приветственный пакет был отправлен более чем через 30 с после успешного установления TCP-соединения.Установка опции do_handshake_on_connect на True только изменила имя ошибки.

Позже мы выяснили, что причина для таймаута была в некоторой операции блокировки (DB).По-видимому, сначала были установлены все TCP-соединения, а затем, когда состоялось первое успешное рукопожатие SSL, был возвращен первый результат, и доступ к БД не позволил бы питону выполнить оставшиеся рукопожатия SSL.

Это происходит, как я понимаю, потому что выполнение SSL-рукопожатия (как любая операция с сокетом) немедленно «уступает» (как в asyncio) другим операциям ввода-вывода, и это непредсказуемо, когда оно будет возобновлено

Итак, как правильно использовать gevent с SSL, обеспечивающим завершение рукопожатия?

enter image description here

...