Какой наиболее эффективный подход к обработке данных, прочитанных из сокета? - PullRequest
2 голосов
/ 22 мая 2011

Я хотел бы использовать libev для потокового сервера, который я пишу.

Вот как все должно работать:

  1. клиент открывает TCP-сокет для подключения к серверу
  2. сервер получает соединение
  3. клиент отправляет список изображений, которые ему нужны
  4. запрос на чтение сервера
  5. сервер перебирает все изображения
    • сервер читает изображение с NAS
    • сервер обрабатывает метаданные файла изображения
    • сервер отправляет данные изображения клиенту

Я нашел пример кода, которыйпозволяет мне читать и писать из сокета, используя события ввода-вывода libev (epoll под капотом).Но я не уверен, как справиться с чтением из NAS и обработкой.Это может занять некоторое время.И я не хочу блокировать сервер, пока это происходит.

Должно ли это быть сделано в другом потоке, и поток должен отправить данные изображения обратно клиенту?

Я былПланирование использования пула потоков.Но, возможно, libev может поддержать этап обработки без блокировки?

Любые идеи или помощь будут с благодарностью!

1 Ответ

1 голос
/ 22 мая 2011

Вам понадобится библиотека файлового ввода-вывода (например, Boost :: ASIO), которая поддерживает асинхронное чтение. Основными API являются aio_read, aio_suspend, lio_listio.

...