Я пишу свой первый однопоточный однопроцессный сервер на C, используя kqueue () / epoll () для обработки асинхронной отправки событий.Как и следовало ожидать, следить за потоком управления намного сложнее, чем на блокирующем сервере.
Существует ли распространенная модель (возможно, даже с именем), которую люди используют, чтобы избежать управляемых обратным вызовомРеализация протокола превращается в гигантский запутанный шарик?
Альтернативно, есть ли какие-нибудь неблокирующие серверы, написанные на C, для которых исходный код приятно читать?*
Больше мыслей:
Кажется, что большая часть ошибок связана с необходимостью бороться с буферизацией ввода-вывода.Не существует необходимого соответствия между заполнением / сливом буфера и переходом одного состояния.Заполнение / сток буфера может соответствовать [0, N] переходам состояний.)
Я посмотрел на libev ( здесь документы ), и он выглядит как отличный инструмент и libevent,это выглядит менее захватывающе, но все же полезно, но ни один из них не отвечает на вопрос: как мне управлять потоком контроля таким образом, чтобы он не был ужасно непрозрачным.