knet — это кроссплатформенная, многопоточная, легковесная TCP-библиотека для транспортировки данных. На данный момент knet поддерживает модели IOCP, select и epoll на Windows и CentOS. Библиотека будет тестироваться под большим количеством версий Linux и Unix, будут реализованы и другие модели, такие как kqueue (kevent) и т. д.
knet не является библиотекой событий, подобной libevent, knet фокусируется только на транспортировке данных.
kloop_t
— это оболочка различных реализованных моделей, с помощью kloop_t
легко создать цикл.
#include "knet.h"
kloop_t* loop = knet_loop_create();
На данный момент цикл готов к запуску, мы создаём channel_ref_t
в качестве акцептора.
kchannel_ref_t* channel = knet_loop_create_channel(loop, 0, 1024);
kchannel_ref_accept(channel, "127.0.0.1", 80);
Мы создали акцепторный канал с бесконечной длиной цепочки отправки и максимальным размером буфера чтения 1024, после чего запустили бесконечный цикл.
knet_loop_run(loop);
knet_loop_destroy(loop);
Программа просто занимает экран, нам нужно добавить код для новых входящих клиентов.
void acceptor_cb(kchannel_ref_t* channel, knet_channel_cb_event_e e) {
if (e & channel_cb_event_accept) { /* the new client coming */
/* TODO do job here */
}
}
Весь процесс выглядит следующим образом:
#include "knet.h"
void acceptor_cb(kchannel_ref_t* channel, knet_channel_cb_event_e e) {
if (e & channel_cb_event_accept) { /* the new client coming */
/* TODO do job here */
}
}
int main() {
kloop_t* loop = knet_loop_create();
kchannel_ref_t* channel = knet_loop_create_channel(loop, 0, 1024);
knet_channel_ref_accept(channel, "127.0.0.1", 80);
knet_channel_ref_set_cb(channel, acceptor_cb);
knet_loop_run(loop);
knet_loop_destroy(loop);
return 0;
}
Для получения более подробной информации см. examples/basic.c
.
В заголовочном файле knet/config.h
измените значение макроса, чтобы сообщить компилятору выбрать конкретную реализацию: IOCP на Windows, epoll по умолчанию на Linux, в будущих выпусках будет добавлено больше реализаций.
Заголовочный файл knet/logger.h
: LOGGER_ON
— это переключатель внутреннего регистратора knet, макросы LOGGER_MODE
и LOGGER_LEVEL
могут изменять режим и уровень регистратора. Внутренний регистратор может помочь разработчику как можно скорее найти проблему, LOGGER_ON
должен быть установлен в 0 в версии выпуска.
kloop_t
работает в потоке, который вызывает knet_loop_run
или knet_loop_run_once
, каждый loop_t
ничего не знает о других. kloop_balancer_t
координирует все подключённые kloop_t
(knet_loop_balance_attach
) и пытается сбалансировать нагрузку для них.
kloop_balancer_t
скрывает детали и усложнения для разработчика, процесс балансировки является потокобезопасным и высокоэффективным. knet предлагает простой API для работы с потоками. Для запуска knet_loop_run_once внутри системы взаимодействие между циклами также прозрачно для разработчиков.
kloop_balancer_t скрывает от разработчика все детали балансировки нагрузки, процесс балансировки нагрузки является потокобезопасным и в то же время очень эффективным. knеt предоставляет простой API для работы с потоками и внутренне выполняет knet_loop_run_once, взаимодействие между сетевыми циклами также является прозрачным для пользователя.
Для более подробной информации см. examples/multi_loop.c
см. doc/knet.pptx для общего представления о knet, см. doc/html/index.html для документации по разработке.
Результаты сборки находятся в папках knet/bin и knet/lib.
см. knet/bin.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )