Управляемый данными подход к созданию сетей в C. Это не может быть новым? - PullRequest
1 голос
/ 24 марта 2011

Я хотел бы знать, было ли что-то подобное сделано раньше:

Я недавно начал работу над сетевой библиотекой на C. Библиотека поддерживает набор сокетов, каждый из которых связанс двумя байтовыми потоками FIFO, входными и выходными.

Предполагается, что разработчик, использующий библиотеку, зарегистрирует некоторые обратные вызовы, состоящие из функции распознавателя и функции-обработчика.Если новые данные поступают в сокет (т. Е. Входной поток), вызывается каждый распознаватель.Если один из распознавателей находит совпадающую часть данных, вызывается связанный с ним обработчик, который потребляет данные и, возможно, ставит в очередь новые данные в выходном потоке сокета, который планируется передать позже.

Вот примерПонятно, как используется библиотека:

// create client socket
client = nc_create(NC_CLIENT);

// register some callback functions that you'll have to supply yourself
nc_register_callback(client, &is_login, &on_login);
nc_register_callback(client, &is_password, &on_password);

// connect to server
nc_dial(client, "www.google.com", "23");

// start main loop (we might as well have more than one connection here)
nc_talk();

Для меня это наиболее очевидный способ написания сетевой библиотеки общего назначения на C. Я провел некоторые исследования с помощью Google, но не смог найтичто-то похожее написано на C. Но трудно поверить, что я первый, кто реализует этот подход.

Существуют ли другие подобные сетевые библиотеки общего назначения на основе C, подобные этой?Вы бы их использовали?

1 Ответ

1 голос
/ 25 марта 2011

Вот несколько библиотек, которые предоставляют похожие API (на разных уровнях, например, libevent предоставляет общий API, управляемый обратным вызовом для дескрипторов сокетов / файлов)

libesmtp ( пример )

libevent

libcurl

API Sun / OncRPC имеют похожий стильв том, что библиотека выполняет тяжелую работу за вас, отправляя запросы соответствующим обработчикам обратного вызова.

Библиотеки Java netty и mina работают аналогичным образом,хотя более объектно-ориентированный.

...