Compatibility with Lwt
Lwt is another library for event-driven programming. Here are some helpers for running Lwt code on top of Ocamlnet event queues.
This is for Lwt-2.3 or better.
See also the comments in [root:Equeue_howto].lwt.
Adapter for turning an Ocamlnet event_system
into an Lwt Lwt_engine.t
.
Use it like:
class lwt_engine esys =
object
inherit Lwt_engine.abstract
inherit Uq_lwt.lwt_backend esys
end
(We've intentionally left out this definition to avoid any
build dependency on Lwt. Also note that Lwt_engine
is in the
package lwt.unix
.)
Now, activate this Lwt engine (event loop):
Lwt_engine.set (new lwt_engine esys)
Note that Lwt can only deal with one event loop at a time, and the new event loop will be used for all Lwt code.
It is, unfortunately, necessary that you use the Lwt main loop
(Lwt_main.run
or Lwt_unix.run
), because otherwise some hook
functions are never executed (and execution will hang).
For an example, see tests/equeue/manual/relay.ml
in the distribution
tarball.
Netplex users: If you want to use lwt_engine
for driving the
event loop of the container, you can do so by overriding the
processor hooks container_event_system
and container_run
, e.g.
method container_event_system () =
let esys = Unixqueue.create_unix_event_system() in
Lwt_engine.set (new lwt_engine esys);
esys
method container_run esys =
Lwt_main.run <something>
The Lwt thread <something>
must at least run until the container is
shut down. You can catch this moment by also defining the shutdown
method.