Рекомендуемые шаблоны для записи асинхронных вечерних серверов на C - PullRequest
1 голос
/ 05 мая 2011

Я пишу свой первый однопоточный однопроцессный сервер на C, используя kqueue () / epoll () для обработки асинхронной отправки событий.Как и следовало ожидать, следить за потоком управления намного сложнее, чем на блокирующем сервере.

Существует ли распространенная модель (возможно, даже с именем), которую люди используют, чтобы избежать управляемых обратным вызовомРеализация протокола превращается в гигантский запутанный шарик?

Альтернативно, есть ли какие-нибудь неблокирующие серверы, написанные на C, для которых исходный код приятно читать?*

Больше мыслей:

Кажется, что большая часть ошибок связана с необходимостью бороться с буферизацией ввода-вывода.Не существует необходимого соответствия между заполнением / сливом буфера и переходом одного состояния.Заполнение / сток буфера может соответствовать [0, N] переходам состояний.)

Я посмотрел на libev ( здесь документы ), и он выглядит как отличный инструмент и libevent,это выглядит менее захватывающе, но все же полезно, но ни один из них не отвечает на вопрос: как мне управлять потоком контроля таким образом, чтобы он не был ужасно непрозрачным.

1 Ответ

1 голос
/ 06 мая 2011

Вы можете попробовать использовать что-то вроде Потоки состояния или Переносимые потоки GNU , что позволяет писать так, как если бы вы использовали один поток на соединение (Реализация использует Волокна ).

Кроме того, вы можете построить реализацию протокола, используя генератор конечных автоматов (например, Ragel ).

...