erps v0.7.0 Erps.Daemon View Source
A Process which sits on a TCP port and listens to inbound connections, handing
them off to Erps.Server modules when an connection arrives.
The Daemon also manages putting those server processes into supervision trees,
usually a DynamicSupervisor. Each server will be seeded with a common initial
data and common options, though they may incur specialization once handed off
to the Erps.Server module's start_link/2 and init/1 functions.
Example:
this invocation will initialize the Erps.Server MyServer with an empty map,
supervised by the DynamicSupervisor named ServerSupervisor. See start_link/2
for more supervision options.
Erps.Daemon.start_link(MyServer, %{}, port: <port_number>, server_supervisor: ServerSupervisor)
Typically, you will also want to supervise Erps.Daemon itself, in which case you
should use the following form, passing it into a static Supervisor:
children = [{Erps.Daemon, {MyServer, %{}, port: <port_number>, server_supervisor: ServerSupervisor}}]
You may override the standard child_spec parameters [:id, :restart, :shutdown] in the options list of the tuple.
Link to this section Summary
Functions
Returns a specification to start this module under a supervisor.
retrieve the TCP port that the erps daemon is bound to.
launches a Erps Daemon, linked to the calling process
Link to this section Types
socket()
View Source
socket() :: :inet.socket() | :ssl.socket()
socket() :: :inet.socket() | :ssl.socket()
Link to this section Functions
child_spec(init_arg) View Source
Returns a specification to start this module under a supervisor.
See Supervisor.
port(srv)
View Source
port(GenServer.server()) :: {:ok, :inet.port_number()} | {:error, any()}
port(GenServer.server()) :: {:ok, :inet.port_number()} | {:error, any()}
retrieve the TCP port that the erps daemon is bound to.
Useful for tests - when we want to assign it a port of 0 so that it gets "any free port" of the system.
start(server_module, data, options \\ [])
View Source
start(module(), term(), keyword()) :: GenServer.on_start()
start(module(), term(), keyword()) :: GenServer.on_start()
see start_link/2
start_link(server_module, data, options! \\ [])
View Source
start_link(module(), term(), keyword()) :: GenServer.on_start()
start_link(module(), term(), keyword()) :: GenServer.on_start()
launches a Erps Daemon, linked to the calling process
You can pass these general options which will propagate to the Erps.Servers.
You may also want to specify the supervision tree using the :server_supervisor
option as follows:
-
server_supervisor: pid_or_nameassumes the supervisor isDynamicSupervisor(or equivalent) and callsDynamicSupervisor.start_child/2 -
server_supervisor: {module, name}allows you to use a generic module for supervision and callsmodule.start_child/2with the server module and the arity-2 parameters for theserver_module.start_link/2function. -
forward_callers: truecauses the daemon and its spawned servers to adopt the universe of the caller. seeMultiversesfor details
other options you may want to override:
-
:port, sets the TCP port the daemon will listen on. Defaults to 0, which means that a random port will be selected, and must be retrieved usingport/1 -
:transport, useful for mocking with TCP instead of TLS in tests -
:tls_opts, useful for specifiying TLS parameters shared by all server processes