grpc v0.3.0-alpha.1 GRPC.Server

A gRPC server which handles requests by calling user-defined functions.

You should pass a GRPC.Service in when use the module:

defmodule Greeter.Service do
  use GRPC.Service, name: "ping"

  rpc :SayHello, Request, Reply
  rpc :SayGoodbye, stream(Request), stream(Reply)
end

defmodule Greeter.Server do
  use GRPC.Server, service: Greeter.Service

  def say_hello(request, _stream) do
    Reply.new(message: "Hello")
  end

  def say_goodbye(request_enum, stream) do
    requests = Enum.map request_enum, &(&1)
    GRPC.Server.send_reply(stream, reply1)
    GRPC.Server.send_reply(stream, reply2)
  end
end

Your functions should accept a client request and a GRPC.Server.Stream. The request will be a Enumerable.t(created by Elixir’s Stream) of requests if it’s streaming. If a reply is streaming, you need to call send_reply/2 to send replies one by one instead of returning reply in the end.

For most functions which return stream, you MUST use the new stream as argument of other functions in this module. And you MUST return that stream in the end in your rpc functions.

Summary

Functions

Send custom metadata(headers)

Send streaming reply

Set custom metadata(headers)

Set custom trailers, which will be sent in the end

DEPRECATED. Use send_reply/2 instead

Types

servers_list()
servers_list :: module | [module]
servers_map()
servers_map :: %{optional(String.t) => [module]}

Functions

send_headers(stream, headers)

Send custom metadata(headers).

You can send headers only once, before that you can set headers using set_headers/2.

send_reply(stream, reply)

Send streaming reply.

Examples

iex> GRPC.Server.send_reply(stream, reply)
set_headers(stream, headers)

Set custom metadata(headers).

You can set headers more than once.

set_trailers(stream, trailers)

Set custom trailers, which will be sent in the end.

stream_send(stream, reply)

DEPRECATED. Use send_reply/2 instead