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

OSCHINA-MIRROR/ithewei-libhv

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

libhv

libhv — это сетевая библиотека, похожая на libevent, libev и libuv. Она предоставляет более простой интерфейс и более богатый набор протоколов.

❌ Уведомление

Этот репозиторий больше не синхронизируется. Перейдите по следующим ссылкам:

✨ Особенности

  • кроссплатформенность (Linux, Windows, Mac, Solaris);
  • высокопроизводительный цикл событий (сетевые события ввода-вывода, таймеры, простаивающие события);
  • TCP/UDP серверы, клиенты и прокси;
  • SSL/TLS шифрование связи (WITH_OPENSSL или WITH_MBEDTLS);
  • HTTP серверы, клиенты (HTTPS, HTTP1/x, HTTP2, gRPC);
  • файловые, каталогизированные и API-сервисы HTTP (поддержка RESTful);
  • серверы и клиенты WebSocket.

⌛️ Сборка

См. BUILD.md.

Для сборки libhv можно использовать следующие методы:

  1. Через Makefile:
./configure
make
sudo make install
  1. Через cmake:
mkdir build
cd build
cmake ..
cmake --build .
  1. Через vcpkg:
vcpkg install libhv
  1. Через xmake:
xrepo install libhv

⚡️ Начало работы и тестирование

Запустите скрипт ./getting_started.sh:

# Загрузка и компиляция
git clone https://github.com/ithewei/libhv.git
cd libhv
make

# Запуск httpd сервиса
bin/httpd -h
bin/httpd -d
#bin/httpd -c etc/httpd.conf -s restart -d
ps aux | grep httpd

# Файловый сервис
bin/curl -v localhost:8080

# Каталог сервисов
bin/curl -v localhost:8080/downloads/

# API сервис
bin/curl -v localhost:8080/ping
bin/curl -v localhost:8080/echo -d "hello,world!"
bin/curl -v localhost:8080/query?page_no=1\&page_size=10
bin/curl -v localhost:8080/kv   -H "Content-Type:application/x-www-form-urlencoded" -d 'user=admin&pswd=123456'
bin/curl -v localhost:8080/json -H "Content-Тип:application/json" -d '{"user":"admin","pswd":"123456"}'
bin/curl -v localhost:8080/form -F "user=admin pswd=123456"
bin/curl -v localhost:8080/upload -F "file=@LICENSE"

bin/curl -v localhost:8080/test -H "Content-Type:application/x-www-form-urlencoded" -d 'bool=1&int=123&float=3.14&string=hello'
bin/curl -v localhost:8080/test -H "Content-Type:application/json" -d '{"bool":true,"int":123,"float":3.14,"string":"hello"}'
bin/curl -v localhost:8080/test -F 'bool=1 int=123 float=3.14 string=hello'
# RESTful API: /group/:group_name/user/:user_id
bin/curl -v -X DELETE localhost:8080/group/test/user/123

HTTP

HTTP-сервер

Смотрите examples/http_server_test.cpp:

#include "HttpServer.h"

int main() {
    HttpService router;
    router.GET("/ping", [](HttpRequest* req, HttpResponse* resp) {
        return resp->String("pong");
    });

    router.GET("/data", [](HttpRequest* req, HttpResponse* resp) {
        static char data[] = "0123456789";
        return resp->Data(data, 10);
    });

    router.GET("/paths", [&router](HttpRequest* req, HttpResponse* resp) {
        return resp->Json(router.Paths());
    });

    router.POST("/echo", [](HttpRequest* req, HttpResponse* resp) {
        resp->content_type = req->content_type;
        resp->body = req->body;
        return 200;
    });

    http_server_t server;
    server.port = 8080;
    server.service = &router;
    http_server_run(&server);
    return 0;
}
HTTP-клиент

Смотрите examples/http_client_test.cpp:

#include "requests.h"

int main() {
    auto resp = requests::get("http://www.example.com");
    if (resp == NULL) {
        printf("request failed!\n");
    } else {
        printf("%d %s\r\n", resp->status_code, resp->status_message());
        printf("%s\n", resp->body.c_str());
    }

    resp = requests::post("127.0.0.1:8080/echo", "hello,world!");
    if (resp == NULL) {
        printf("request failed!\n");
    } else {
        printf("%d %s\r\n", resp->status_code, resp->status_message());
        printf("%s\n", resp->body.c_str());
    }

    return 0;
}

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

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

1
https://api.gitlife.ru/oschina-mirror/ithewei-libhv.git
git@api.gitlife.ru:oschina-mirror/ithewei-libhv.git
oschina-mirror
ithewei-libhv
ithewei-libhv
master