livery_grpc (livery_grpc v0.1.1)
View SourcePublic facade: run a gRPC server on a dedicated livery HTTP/2 listener.
A gRPC server is its own listener, serving only gRPC. The dispatcher owns
every stream, routing POST /package.Service/Method to the Erlang
callback module bound to that service. One listener per server keeps gRPC
framing and routing separate from any REST surface.
{ok, Server} = livery_grpc:start_server(#{
port => 50051,
services => [
#{proto => helloworld_pb, service => 'Greeter', handler => my_greeter}
]
}),
%% my_greeter implements one Erlang function per RPC, named in snake_case:
%% say_hello(#{name := Name}, _Ctx) -> {ok, #{message => <<"hi ", Name/binary>>}}.
ok = livery_grpc:stop_server(Server).The transport defaults to tcp (h2c); pass transport => ssl with
cert and key to serve over TLS with ALPN-negotiated h2. Each service
binds a handler module; its callbacks receive the decoded request
message and a context (see livery_grpc_server:ctx/0).
Summary
Functions
The TCP port a running server is bound to.
Start a gRPC server on its own h2 listener.
Stop a gRPC server.
Types
-type server() :: pid().
-type server_opts() :: #{services := [service_spec()], port => inet:port_number(), transport => tcp | ssl, cert => binary() | string(), key => binary() | string(), cacerts => [binary()], ssl_opts => [ssl:tls_server_option()], acceptors => pos_integer(), compression => livery_grpc_compression:algorithm(), reflection => boolean(), middleware => livery_middleware:stack(), config => term()}.
Functions
-spec server_port(server()) -> inet:port_number().
The TCP port a running server is bound to.
-spec start_server(server_opts()) -> {ok, server()} | {error, term()}.
Start a gRPC server on its own h2 listener.
services is required: a list of #{proto, service, handler} bindings.
Returns the listener handle for stop_server/1 and server_port/1.
-spec stop_server(server()) -> ok.
Stop a gRPC server.