1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dennis-kk-knet

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 10:56 ef57f97

knet — это кроссплатформенная, многопоточная, легковесная TCP-библиотека для транспортировки данных. На данный момент knet поддерживает модели IOCP, select и epoll на Windows и CentOS. Библиотека будет тестироваться под большим количеством версий Linux и Unix, будут реализованы и другие модели, такие как kqueue (kevent) и т. д.

knet не является библиотекой событий, подобной libevent, knet фокусируется только на транспортировке данных.

Loop

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.

config.h

В заголовочном файле knet/config.h измените значение макроса, чтобы сообщить компилятору выбрать конкретную реализацию: IOCP на Windows, epoll по умолчанию на Linux, в будущих выпусках будет добавлено больше реализаций.

Заголовочный файл knet/logger.h: LOGGER_ON — это переключатель внутреннего регистратора knet, макросы LOGGER_MODE и LOGGER_LEVEL могут изменять режим и уровень регистратора. Внутренний регистратор может помочь разработчику как можно скорее найти проблему, LOGGER_ON должен быть установлен в 0 в версии выпуска.

Balancer

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

Document

см. doc/knet.pptx для общего представления о knet, см. doc/html/index.html для документации по разработке.

Build

  1. Windows: см. knet/win-proj/knet.sln
  2. Linux: ./build.sh [IPV6]

Результаты сборки находятся в папках knet/bin и knet/lib.

Test

см. knet/bin.

  1. Windows: test_client.exe, test_server.exe
  2. Linux: test_client, test_server
  3. Командная строка клиента:
    1. -ip — IP-адрес сервера прослушивания;
    2. -port — порт прослушивания сервера;
    3. -n — количество соединителей.
  4. Командная строка сервера:
    1. -ip — IP-адрес сервера прослушивания;
    2. -port — порт прослушивания сервера;
    3. -w — количество рабочих.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dennis-kk-knet.git
git@api.gitlife.ru:oschina-mirror/dennis-kk-knet.git
oschina-mirror
dennis-kk-knet
dennis-kk-knet
master