Skip to content

Repository files navigation

gRPC Elixir

Hex.pmTravis StatusGitHub actions StatusLicenseLast UpdatedTotal Download

An Elixir implementation of gRPC.

Table of contents

Notice

Note The Gun library doesn't have a full 2.0 release yet, so we depend on :grcp_gun 2.0.1 for now. This is the same as :gun 2.0.0-rc.2, but Hex doesn't let us depend on RC versions for releases.

Installation

The package can be installed as:

defdepsdo[{:grpc,"~> 0.5.0"},# We don't force protobuf as a dependency for more# flexibility on which protobuf library is used,# but you probably want to use it as well{:protobuf,"~> 0.10"}]end

Usage

  1. Generate Elixir code from proto file as protobuf-elixir shows(especially the gRPC Support section).

  2. Implement the server side code like below and remember to return the expected message types.

defmoduleHelloworld.Greeter.ServerdouseGRPC.Server,service: Helloworld.Greeter.Service@specsay_hello(Helloworld.HelloRequest.t,GRPC.Server.Stream.t)::Helloworld.HelloReply.tdefsay_hello(request,_stream)doHelloworld.HelloReply.new(message: "Hello #{request.name}")endend
  1. Start the server

You can start the gRPC server as a supervised process. First, add GRPC.Server.Supervisor to your supervision tree.

# Define your endpointdefmoduleHelloworld.EndpointdouseGRPC.EndpointinterceptGRPC.Logger.ServerrunHelloworld.Greeter.Serverend# In the start function of your ApplicationdefmoduleHelloworldAppdouseApplicationdefstart(_type,_args)dochildren=[# ...{GRPC.Server.Supervisor,endpoint: Helloworld.Endpoint,port: 50051}]opts=[strategy: :one_for_one,name: YourApp]Supervisor.start_link(children,opts)endend
  1. Call rpc:
iex>{:ok,channel}=GRPC.Stub.connect("localhost:50051")iex>request=Helloworld.HelloRequest.new(name: "grpc-elixir")iex>{:ok,reply}=channel|>Helloworld.Greeter.Stub.say_hello(request)# With interceptorsiex>{:ok,channel}=GRPC.Stub.connect("localhost:50051",interceptors: [GRPC.Logger.Client])...

Check examples and interop(Interoperability Test) for some examples.

Features

Benchmark

  1. Simple benchmark by using ghz

  2. Benchmark followed by official spec

Contributing

Your contributions are welcome!

Please open issues if you have questions, problems and ideas. You can create pull requests directly if you want to fix little bugs, add small features and so on. But you'd better use issues first if you want to add a big feature or change a lot of code.

About

An Elixir implementation of gRPC

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages