Я должен реализовать (клиентский) сокет, который требует высокой пропускной способности (> 800 Мбит / с) и низкой задержки, работающей на сервере Windows 7. Перекрытый ввод-вывод, кажется, путь к высокой производительности.
Прочитайте некоторую документацию по этому вопросу, насколько я вижу преимущество перекрывающегося ввода-вывода в том, что вы передаете в ОС некоторые структуры с буфером и получаете уведомление об их заполнении.
Нет, мне интересно, каковы общие способы объединения этого с протоколом на основе пакетов (длина пакетов с разделителями, заголовок содержит размер блока данных)
Конечно, я могу просто прочитать произвольные порции данных и скопировать необходимое количество байтов в строку сообщения. Это означает дополнительное действие копирования.
Вторым вариантом может быть передача структуры сообщения в виде буфера с размером заголовка, после получения его снова передайте ту же структуру, чтобы прочитать запрошенное количество данных. В этом случае первое чтение блока является небольшим, но данные сохраняются в структуре сообщения, и пока чтение блока данных находится в ожидании, чтение следующего блока заголовка может быть инициализировано.
Есть опыт или идеи, как сделать пакеты с разделителями длины наиболее эффективными?
Спасибо,
Проверять, выписываться разброс / сбор ввода / вывода если вы знаете размеры пакетов.
Других решений пока нет …