Coder Social home page Coder Social logo

grpc-elixir's Introduction

gRPC Elixir

Hex.pm Build Status Inline docs

The Elixir implementation of gRPC.

WARNING: APIs are unstable now. Be careful to use it in production!

Installation

The package can be installed as:

  1. Add grpc to your list of dependencies in mix.exs:

    def deps do
      [{:grpc, github: "tony612/grpc-elixir"}]
    end
  2. (Before Elixir 1.4)Ensure grpc is started before your application:

    def application do
      [applications: [:grpc]]
    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.
defmodule Helloworld.Greeter.Server do
  use GRPC.Server, service: Helloworld.Greeter.Service

  @spec say_hello(Helloworld.HelloRequest.t, GRPC.Server.Stream.t) :: Helloworld.HelloReply.t
  def say_hello(request, _stream) do
    Helloworld.HelloReply.new(message: "Hello #{request.name}")
  end
end
  1. Run the server and client like this:
iex> GRPC.Server.start(Helloworld.Greeter.Server, 50051)
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)

Start the server

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

# In the start function of your Application
def start(_type, _args) do
  children = [
    # ...
    supervisor(GRPC.Server.Supervisor, [{Helloworld.Greeter.Server, 50051}])
  ]

  opts = [strategy: :one_for_one, name: YourApp]
  Supervisor.start_link(children, opts)
end

Then run grpc.server using a mix task

$ mix grpc.server

or start it when starting your application:

# config.exs
config :grpc, start_server: true

$ iex -S mix

Check examples and interop(Interoperability Test) for all examples

TODO

  • Unary RPC
  • Server streaming RPC
  • Client streaming RPC
  • Bidirectional streaming RPC
  • Helloworld and RouteGuide examples
  • Doc and more tests
  • Authentication with TLS
  • Improve code generation from protos (protobuf-elixir #8)
  • Timeout for unary calls
  • Errors handling
  • Benchmarking
  • Logging
  • Data compression
  • Support other encoding(other than protobuf)

Sponsors

This project is being sponsored by Tubi. Thank you!

Contributing

You 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.

grpc-elixir's People

Contributors

aroyer avatar cjab avatar d2km avatar damjanbecirovic avatar darkofabijan avatar drowzy avatar falood avatar fire avatar gmile avatar jayh5 avatar redink avatar scohen avatar ssboisen avatar tiagopog avatar tony612 avatar xenolf avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.