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

OSCHINA-MIRROR/acl-dev-acl

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Этот модуль в основном поддерживает:

  • мониторинг сетевого сервера (поддерживает TCP/UDP/UNIX domain socket);
  • подключение сетевого клиента (поддерживает TCP/UNIX domain socket);
  • кэширование результатов запроса DNS-домена (поддерживает вызов системной функции gethostbyname/getaddrinfo и прямой двухсторонний протокол Send DNS);
  • операции с сокетами (socket) и использование локальной сетевой карты, а также другие функции.

Неблокирующий сетевой поток:

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

Библиотека протоколов общего сетевого приложения:

  • в основном поддерживает распространённые протоколы сетевых приложений, такие как HTTP, SMTP, ICMP. В модулях HTTP и ICMP реализованы методы блокирующей и неблокирующей связи. Кроме того, протокол HTTP поддерживает сервер и клиент в версии C++ lib_acl_cpp. При использовании в качестве сервера он поддерживает интерфейс, аналогичный JAVA HttpServlet. В клиентском режиме он поддерживает управление пулом соединений и кластером. Модуль поддерживает файлы cookie, сеансы и загрузку файлов MIME HTTP. Богатые функции, такие как блочная передача, автоматическое преобразование кодировки, автоматическая распаковка и возобновление с точки останова.

Общая библиотека сетевой коммуникации:

  • поддерживает memcached, beanstalk, клиентскую библиотеку обработки сокетов, библиотека поддерживает режим пула соединений.

1.2. Coroutine

Модуль сопрограммы в Acl можно использовать на нескольких платформах, и существует множество инженерных практик в некоторых важных проектах.

  • Работает на Linux, MacOS, Windows, iOS и Android.
  • Поддерживает архитектуры x86 и Arm.
  • Поддержка select/poll/epoll/kqueue/iocp/win32 GUI message.
  • DNS-протокол был реализован в сопрограмме acl, поэтому API DNS также можно использовать в модели сопрограмм.
  • Перехват системного IO API в Unix и Windows:
    • API чтения: read/readv/recv/recvfrom/recvmsg.
    • API записи: write/writev/send/sendto/sendmsg/sendfile64.
    • Socket API: socket/listen/accept/connect/setsockopt.
    • Event API: select/poll/epoll_create/epoll_ctl/epoll_wait.
    • DNS API: gethostbyname/gethostbyname_r/getaddrinfo/freeaddrinfo.
  • Поддержка режима общего стека для минимизации использования памяти.
  • Синхронизация примитивов:
    • мьютекс, семафор сопрограммы можно использовать между сопрограммами;
    • событие сопрограммы можно использовать между сопрограммами и потоками. Для получения дополнительной информации см. Использование волокна Acl.

1.3. HTTP-модуль

Поддерживает HTTP/1.1, может использоваться на стороне клиента и сервера.

  • Интерфейс HttpServlet, подобный Java (на стороне сервера).
  • Режим пула соединений (на стороне клиента).
  • Блочное разбиение по частям.
  • Сжатие/распаковка Gzip.
  • Шифрование SSL.
  • Передача точек останова.
  • Установка/получение файлов cookie.
  • Управление сеансами (на стороне сервера).
  • Передача Websocket.
  • Формат HTTP MIME.
  • Синхронный/асинхронный режим.
  • ...

1.4. Redis-клиент

Redis-клиент в Acl мощный, высокопроизводительный и простой в использовании.

  • Поддержка Bitmap/String/Hash/List/Set/Sorted Set/PubSub/HyperLogLog/Geo/Script/Stream/Server/Cluster и т. д.
  • Предоставляет интерфейс C++, подобный STL, для каждой команды redis.
  • Автоматически кэширует и адаптируется к изменениям хэш-слотов кластера redis на клиенте.
  • Связь в одиночном, кластерном или конвейерном режиме.
  • В одиночном или кластерном режиме можно использовать пул соединений.
  • Высокая производительность в кластерном или конвейерном режимах.
  • Одинаковый интерфейс для одиночного, кластерного и конвейерного режимов.
  • Автоматическая повторная попытка из-за ошибки сети.
  • Можно использовать в режиме сопрограммы с общим стеком.
  • Для получения дополнительной информации см. Использование клиента Acl redis.

1.5. MQTT-модуль

В Acl реализована версия MQTT 3.1.1 с анализатором потоков, поэтому её можно использовать независимо от любого режима ввода-вывода.

  • Поддержка протокола MQTT 3.1.1: CONNECT/CONNACK/PUBLISH/PUBACK/PUBREC/PUBREL/PUBCOMP/SUBSCRIBE/SUBACK/UNSUBSCRIBE/UNSUBACK/PINGREQ/PINGRESP/DISCONNECT.
  • Один класс на команду.
  • Анализатор потоков можно использовать для любого режима ввода-вывода.
  • Анализ данных отделяется от сетевой связи.
  • Может использоваться на клиенте и сервере. Но также реализует протокол DNS, указанный в RFC1035. Пользователи могут использовать модуль DNS в Acl для реализации собственного DNS-клиента или сервера.

3. Поддержка платформ и компиляция

3.1. Компиляция Acl на разных платформах

Проект Acl в настоящее время поддерживает Linux, Windows, MacOS, FreeBSD, Solaris, Android и iOS.

  • Linux/UNIX: компилятор — gcc/clang, перейдите в каталог acl/ и запустите make, тогда в каталоге acl/ будут сгенерированы файлы libacl_all.a и libacl_all.so, libacl_all.a состоит из трёх библиотек, включая lib_acl.a, lib_protocol.a и libacl_cpp.a; Вы также можете использовать cmake для сборки и установки библиотек Acl, запустив скрипт cmake-build.sh в каталоге Acl; И xmake также может компилировать Acl при запуске xmake в каталоге Acl.
  • Windows: можно скомпилировать с помощью VS2003/VS2008/VS2010/VS2012/VS2013/VS2015/VS2019. (Если вам нужно скомпилировать с VS6/VS2005, вы можете обратиться к условиям компиляции VS2003);
  • MacOS/iOS: скомпилирован с xcode;
  • Android: откройте проект Adnroid в acl/android/acl_c++_shared/ с помощью Android Studio;
  • Поддержка кроссплатформенной компиляции с cmake.

3.2. Меры предосторожности при компиляции в Windows

При использовании динамических библиотек в среде WIN32 необходимо учитывать несколько моментов:

  • При использовании динамической библиотеки lib_acl её необходимо предварительно определить в проекте пользователя: ACL_DLL;
  • При использовании HTTP-библиотеки или ICMP-библиотеки в динамической библиотеке lib_protocol необходимо предварительно определить HTTP_DLL или ICMP_DLL в проекте;
  • При использовании динамической библиотеки lib_acl_cpp необходимо предварительно определить ACL_CPP_DLL в проекте. Если вы используете среду компилятора VC2003, вам необходимо предварительно определить VC2003;
  • При использовании динамической библиотеки lib_dict необходимо предварительно определить DICT_DLL в проекте;
  • При использовании динамической библиотеки lib_tls необходимо предварительно определить TLS_DLL в вашем проекте.
  • Подробный процесс компиляции см.: Компиляция и использование библиотеки acl

4. Быстрый старт

4.1. Первая демонстрация с Acl

#include <iostream>
#include "acl_cpp/lib_acl.hpp"

int main(void) {
  acl::string buf = "hello world!\r\n";
  std::cout << buf.c_str() << std::endl;
  return 0;
}

4.2. Простой TCP-сервер

#include <thread>
#include "acl_cpp/lib_acl.hpp"

void run(void) {
  const char* addr = "127.0.0.1:8088";
  acl::server_socket server;
  if (!server.open(addr)) {  // Bind and listen the local address.
    return;
  }

  while (true) {
    acl::socket_stream* conn = server.accept(); // Wait for connection.
    if (conn == NULL) {
      break;
    }
    std::thread thread([=] {  // Start one thread to handle the connection.
      char buf[256];
      int ret = conn->read(buf, sizeof(buf), false);  // Read data.
      if (ret > 0) {
        conn->write(buf, ret);  // Write the received data.
      }
      delete conn;
    });
    thread.detach();
  }
}

4.3. Простой TCP-клиент

#include "acl_cpp/lib_acl.hpp"

void run(void) {
  const char* addr = "127.0.0.1:8088";
  int conn_timeout = 5, rw_timeout = 10;
  acl::socket_stream conn;
  if (!conn.open(addr, conn_timeout, rw_timeout)) { // Connecting the server.
    return;
  }
  const char data[] = "Hello world!\r\n";
  if (conn.write(data, sizeof(data) - 1) == -1) {  // Send data to server.
    return;
  }
  char buf[256];
  int ret = conn.read(buf, sizeof(buf) - 1, false);
  if (ret > 0) {  // Read from server.
    buf[ret] = 0;
    std::cout << buf << std::endl;
  }
}

4.4. Корутинный TCP-сервер

#include "acl_cpp/lib_acl.hpp"
#include "fiber/go_fiber.hpp"

void run(void) {
  const char* addr = "127.0.0.1:8088";
  acl::server_socket server;
  if (!server.open(addr)) {
    return;
  }

  go[&] {  // Create one server coroutine to wait for connection.
    while (true) {
      acl::shared_stream conn = server.shared_accept();
      if (conn == nullptr) {
        break;
      }

      go[conn] {  // Create one client coroutine to handle the connection.
        while (true) {
          char buf[256];
          int ret = conn->read(buf, sizeof(buf), false);
          if (ret <= 0

Комментарии ( 0 )

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

Введение

Межплатформенный фреймворк для разработки серверных решений и сетевой коммуникации; поддерживает сетевые протоколы HTTP, MQTT, Redis, Memcache, SMTP, PING, Beanstalk, handler socket и другие; поддерживает различные модели серверного программирования, такие как пулы потоков, корутины, пулы процессов, неблокирующие триггеры и т. д.; поддерживает к... Развернуть Свернуть
LGPL-3.0
Отмена

Обновления (23)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/acl-dev-acl.git
git@api.gitlife.ru:oschina-mirror/acl-dev-acl.git
oschina-mirror
acl-dev-acl
acl-dev-acl
master