# Module Ocsigen_comet.Channels

    module Channels: sig .. end

    exception Too_many_virtual_channels

An exception that may be raised when trying to create a new channel while the channel count exceed `max_virtual_channels`. Note that by default `max_virtual_channels` is set to `None` so that the exception is never raised.

    exception Non_unique_channel_name

An exception raised when creating a channel with a name already associated to another channel. It is strictly forbidden to name several channels with the same string.

    type t

The abstract type of server-to-client communication channels.

    type chan_id = string

The type of channel identifier. Channels are uniquely identified by there chan_id value.

    val create : ?name:string -> unit -> t

`create ()` returns a channel with a freshly baked identifier while `create ~name ()` returns a channel with the identifier `name` after checking for uniqueness. If `name` is the identifier of an existing channel, the exception `Non_unique_channel_name` is raised.

    val write : t ->
           string * Ocsigen_stream.outcome Lwt.u option -> unit

`write c (s, u)` sends the string `s` on the channel `c`. The argument `u` allow one to observe the result of the operation. If `u` is `None`, there is no way to tell if the sending worked as expected. However if `u` is `Some u'` then `u'` will be woken up with the outcome (either ``Falure` or ``Success`) of the stream writing process.

    val listeners : t -> int

`listeners c` returns the number of clients currently registered on `c` A client is "currently registered" on a channel if an actual connection is open for the server to push a message onto. Note that this information is server-based only, and that because it is so, some clients may still be registered as active while they have in fact closed the connection. In such a case, the outcome mechanism in `write` will report the failure.

    val get_id : t -> chan_id

`get_id c` returns the unique identifier associated to `c`. The client can register to `c` using the returned identifier.