zoukankan      html  css  js  c++  java
  • elixir grpc 试用

    备注:

     elixir  grpc 封装测试
     
    1.  安装
    a. 安装 protoc 参考相关文档,比较简单
    b. 安装elixir  grpc 插件 protoc-gen-elixir 同时配置环境变量
     
    2. 基本项目使用
    a. 创建项目
    mix new appdemo
    
    cd appdemo
    
    touch helloword.proto
    
    syntax = "proto3";
    
    option java_multiple_files = true;
    option java_package = "io.grpc.examples.helloworld";
    option java_outer_classname = "HelloWorldProto";
    option objc_class_prefix = "HLW";
    
    package helloworld;
    
    // The greeting service definition.
    service Greeter {
      // Sends a greeting
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    // The request message containing the user's name.
    message HelloRequest {
      string name = 1;
    }
    
    // The response message containing the greetings
    message HelloReply {
      string message = 1;
    }
    
    
    项目结构如下:
    
    ├── README.md
    ├── config
    │   └── config.exs
    ├── helloword.proto
    ├── lib
    │   ├── appdemo.ex
    ├── mix.exs
    └── test
        ├── appdemo_test.exs
        └── test_helper.exs
    
    b. 生成代码
    
    protoc --elixir_out=./lib helloword.proto
    protoc -I . --elixir_out=plugins=grpc:./lib/ helloword.proto
    结果如下:
    
    ├── README.md
    ├── config
    │   └── config.exs
    ├── helloword.proto
    ├── lib
    │   ├── appdemo.ex
    │   └── helloword.pb.ex
    ├── mix.exs
    └── test
        ├── appdemo_test.exs
        └── test_helper.exs
    
    内容:
    
    defmodule Helloworld.HelloRequest do
      use Protobuf
    
      @type t :: %__MODULE__{
              name: String.t()
            }
      defstruct [:name]
    
      field :name, 1, optional: true, type: :string
    end
    
    defmodule Helloworld.HelloReply do
      use Protobuf
    
      @type t :: %__MODULE__{
              message: String.t()
            }
      defstruct [:message]
    
      field :message, 1, optional: true, type: :string
    end
    
    defmodule Helloworld.Greeter.Service do
      use GRPC.Service, name: "helloworld.Greeter"
    
      rpc :SayHello, Helloworld.HelloRequest, Helloworld.HelloReply
    end
    
    defmodule Helloworld.Greeter.Stub do
      use GRPC.Stub, service: Helloworld.Greeter.Service
    end
     
     
    3. 项目使用(接上面项目)
    a.  server端实现代码
    
    lib/server.ex
    
    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
    
    
    b. 项目使用opt 进行运行,具体来说是supervisor
    
    lib/helloworld_app.ex
        
    defmodule HelloworldApp do
      use Application
    
      def start(_type, _args) do
        import Supervisor.Spec
    
        children = [
          supervisor(GRPC.Server.Supervisor, [{Helloworld.Greeter.Server, 50051}])
        ]
    
        opts = [strategy: :one_for_one, name: HelloworldApp]
        Supervisor.start_link(children, opts)
      end
    end
    
    c. mix.exs 启动配置
    
    def application do
        [mod: {HelloworldApp, []},
         applications: [:logger, :grpc]]
    end
      
    defp deps do
        [
          {:grpc, github: "tony612/grpc-elixir"},
          {:dialyxir, "~> 0.5", only: [:dev, :test], runtime: false},
        ]
    end
    
    d. config/config.exs
    
    use Mix.Config
    
    # Start server in OTP
    config :grpc, start_server: true
     
     
    4. 启动
    mix  deps.get,compile 
    iex -S  mix
     
    5. golang client demo 
     
    参考 https://github.com/rongfengliang/grpc-elixir
     
     
    6. 参考资料
    https://github.com/rongfengliang/grpc-elixir
    https://github.com/rongfengliang/gprc-elixir-server
    https://github.com/tony612/grpc-elixir
     
  • 相关阅读:
    Sliding Window
    方程的解数
    [JLOI2011]不重复数字
    A−B数对
    2007年分区联赛提高组之一 统计数字
    Magic Squares 魔板 (BFS+HASH)
    集合(normal)
    Place the Robots
    LoadRunner监控Linux
    CentOS6.3(64位)下安装Oracle11gR2(64)服务器
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/8810563.html
Copyright © 2011-2022 走看看