История изменений
Исправление utf8nowhere, (текущая версия) :
Как вообще принято реализовывать подобные вещи?
Если говорить про разбор протоколов, то один из подходов — т.н. sans-IO. Где разбор протокола, как можно догадаться по названию, отделяется от IO. Парсер становится автоматом, который на вход принимает байт (или буфер, для оптимизации), а на выходе выдаёт события/инструкции типа: НАЧАЛ_ЧИТАТЬ_СТРОКУ, ЗАКОНЧИЛ_ЧИТАТЬ_СТРОКУ или ДАЙ_ИЩО_БАЙТОВ
Это даёт свободу в способе добычи байтов: читать из fd, из FILE
, из memory-mapped файла, синхронно или асинхронно.
Исходная версия utf8nowhere, :
Как вообще принято реализовывать подобные вещи?
Если вопрос про разбор протокола, то один из подходов — т.н. sans-IO. Где разбор протокола, как можно догадаться по названию, отделяется от IO. Парсер становится автоматом, который на вход принимает байт (или буфер, для оптимизации), а на выходе выдаёт события/инструкции типа: НАЧАЛ_ЧИТАТЬ_СТРОКУ, ЗАКОНЧИЛ_ЧИТАТЬ_СТРОКУ или ДАЙ_ИЩО_БАЙТОВ
Это даёт свободу в способе добычи байтов: читать из fd, из FILE
, из memory-mapped файла, синхронно или асинхронно.