Я пишу HTTP-клиент, используя .Net TcpClient / Sockets.
Пока что клиент обрабатывает как Content-Length, так и фрагментированные ответы, повторяя ответ NetworkStream (после записи запроса GET в TcpClient), анализируя заголовки и извлекая соответствующие байты тела сообщения / фрагментированные байты. Для этого он использует метод NetworkStream ReadByte.
Все это работает нормально, но производительность - ключевой фактор приложения, поэтому я хотел бы сделать его максимально быстрым и эффективным.
Первоначально это будет включать замену ReadByte на Read для тела сообщения (на основе Content-Length) или извлечение байтов тела сообщения по фрагментам в буфер подходящего размера с использованием ReadByte во всех других областях (например, чтение заголовков, размеров фрагментов и т. Д.).
Мне интересно узнать мысли о лучших / различных способах сделать это для достижения оптимальной производительности? Очевидно, что основная проблема HTTP - это незнание длины потока ответа, если он не анализируется при получении.
Есть определенные причины, по которым я не использую для этого более абстрактные классы (например, HttpWebRequest) (мне нужен лучший контроль на уровне сокета).
Огромное спасибо,
Крис