Есть ли асинхронная сетевая библиотека в linux c?

Я хочу создать систему, как показано ниже:

Клиент будет отправлять запросы на сервер.

Сервер получает запросы и загружает файл запроса из облака асинхронно . Это означает, что сервер будет просто получать запросы, а затем загружать эти запросы какой-либо библиотекой.

Библиотека уведомит сервер, когда загрузка будет завершена, затем сервер уведомит клиента о завершении загрузки.

Есть ли такая библиотека в linux c? curl_multi_* не блокирует, поэтому мне нужно каждый раз опрашивать curl_multi_perform, поэтому для меня это не идеальная асинхронная библиотека. спасибо

Ответы (1)

Есть много доступных вариантов. Если вы готовы писать низкоуровневый код и контролировать каждый аспект связи и протокола, то один из них — libuv . Согласно их описанию, особенности:

  • Полнофункциональный цикл событий, поддерживаемый epoll, kqueue, IOCP, портами событий.
  • Асинхронные сокеты TCP и UDP
  • Асинхронное разрешение DNS
  • Асинхронные операции с файлами и файловыми системами
  • События файловой системы
  • TTY, управляемый управляющим кодом ANSI
  • IPC с совместным использованием сокетов, с использованием сокетов домена Unix или именованных каналов (Windows)
  • Дочерние процессы
  • Пул потоков
  • Обработка сигналов
  • Часы с высоким разрешением
  • Примитивы многопоточности и синхронизации

Кроме того, вы можете посмотреть на libevent . Список функций в основном дублирует libuv.

Однако, если вы не ограничены языком программирования C, я бы порекомендовал вам попробовать gRPC . Он прост в использовании и абстрагирует многие подверженные ошибкам места в вашем коде.

Я использую libevent и libcurl и пытаюсь использовать curl_multi_* для асинхронного режима, есть предложения? спасибо
Если у вас есть какие-либо конкретные вопросы о том, как использовать эти библиотеки, лучшее место для таких вопросов — stackoverflow.