Как использовать Lwt_pool

Я хочу иметь пул соединений с базой данных Redis с максимальным количеством соединений. Это выглядит как Lwt_pool это решение, которое я ищу, но я не совсем понимаю, как оно должно работать. Например, у меня есть несколько вопросов:

  • Документы говорят о Lwt_pool замечательно использовать повторно открытые соединения, но как пул узнает, какие соединения доступны для повторного использования? Насколько я вижу, нет особого способа сообщить об этом, а API предоставляет только use метод.

  • Есть ли ресурс лучше, чем Lwt документы, чтобы узнать, как это работает? Я не могу легко найти примеры кода или много доступных ресурсов об этом.

1 ответ

Решение
  • Функция, которую вы передаете use возвращает поток Когда поток завершается, соединение освобождается обратно в пул.

  • Исходный код довольно легко читается. В этом случае:

    let use p f =
      acquire p >>= fun c ->
      Lwt.catch
        (fun () ->
           let t = f c in
           t >>= fun _ ->
           release p c;
           t)
        (fun e ->
           checked_release p c;
           Lwt.fail e)
    
Другие вопросы по тегам