Ocaml 如何充分利用lwt_池?

Ocaml 如何充分利用lwt_池?,ocaml,ocsigen,lwt,Ocaml,Ocsigen,Lwt,我正在为Lwt\u池的检查和验证功能而努力。创建并在此处提出一些问题 首先,让我描述一下我的使用背景 我希望使用Lwt\u pool来管理数据库连接池。数据库是MongoDB,驱动程序是我自己制作的(Mongo.ml)。驱动程序实际上很简单,它只是到MongoDB服务器的TCP(Unix.file_descr)连接,并与服务器发送请求/接收响应 以上是用于创建的文档 下面是我的问题: 从文档中,我了解到验证是在使用连接之前验证连接 因此,我的第一个问题是如何检查Unix.file\u de

我正在为
Lwt\u池的检查和验证功能而努力。创建
并在此处提出一些问题


首先,让我描述一下我的使用背景

我希望使用
Lwt\u pool
来管理数据库连接池。数据库是
MongoDB
,驱动程序是我自己制作的(
Mongo.ml
)。驱动程序实际上很简单,它只是到MongoDB服务器的TCP(
Unix.file_descr
)连接,并与服务器发送请求/接收响应


以上是用于创建的文档


下面是我的问题:

从文档中,我了解到验证是在使用连接之前验证连接

因此,我的第一个问题是如何检查Unix.file\u descr的可用性?我只知道为了检查它,我通过它发送了一些东西,对吗?但是如果我通过我的连接发送一些东西以进行检查,那么我想这将是非常紧急的,我无论如何都想通过
Lwt\u pool发送一些东西。使用
,为什么要在使用之前做类似的事情呢


我的第二个问题是关于支票

因此,使用后将使用检查。从医生那里,我真的不明白。check是一个以my_db_连接(在我的例子中)和a(fun b->unit)为参数的函数。谁将提供(乐趣b->单位)?Lwt_池本身有这样的功能吗?还是我应该提供?那怎么办


谢谢

我对Lwt一无所知,但要做的一件事是等待使用验证函数,直到您知道为什么需要它。这就是为什么它是一个可选参数(我怀疑)

使用Unix文件描述符可以做的一件事是确定它是否连接到网络套接字:

let is_a_socket fd = (Unix.fstat fd).st_kind = S_SOCK

也许这会很有用,不过有Lwt经验的人可能会给出更好的答案。

太好了。请记住,这只是查询本地状态以确定文件描述符的类型。它不会验证任何有关连接状态的信息。如果要查询更多本地状态,可以使用
Unix.getsockname
Unix.getpeername
查看本地和远程IP地址。
`create n ?check ?validate f` creates a new pool with at most n members. f is the function to use to create a new pool member.

An element of the pool is validated by the optional validate function before its Lwt_pool.use. Invalid elements are re-created.

The optional function check is called after a use of an element failed. It must call its argument excatly one with true if the pool member is still valid and false otherwise.
let is_a_socket fd = (Unix.fstat fd).st_kind = S_SOCK