Я не уверен, что это все еще актуально для вас, но я столкнулся с той же ситуацией, и я считаю, что нашел решение. Если это не относится к вам, возможно, это поможет некоторым другим, особенно с учетом того, что библиотека WiFiClientSecure по умолчанию скоро будет переключена на BearSSL, и в настоящее время поддержка существующей реализации не предоставляется.
Хотя мне не удалось ускорить функцию readString, я использовал функцию WiFiClientSecure::read(uint8_t *buf, size_t size)
для получения данных с сервера:
// Buffer size, 128 bytes in this case
#define RESP_BUFFER_LENGTH 128
// Pointer to actual buffer
uint8_t * _buffer = new uint8_t[RESP_BUFFER_LENGTH];
// String to hold the final response
String _responseString = "";
// If info is still available
while (wifiClient.available())
{
// Fill the buffer and make a note of the total read length
int actualLength = wifiClient.read(_buffer, RESP_BUFFER_LENGTH);
// If it fails for whatever reason
if(actualLength <= 0)
{
// Handle as you see fit
return -1;
}
// Concatenate the buffer content to the final response string
// I used an arduino String for convenience
// but you can use strcat or whatever you see fit
_responseString += String((char*)_buffer).substring(0, actualLength);
}
// Clear buffer memory
delete[] _buffer;
Я не знаю, почему обычное readString () так медленно, но этот метод значительно быстрее, с моими относительно небольшими сообщениями (~ 50 байт), ответ читается почти мгновенно.