zoukankan      html  css  js  c++  java
  • 学习GRPC(一) 简单实现

    Grpc

    实现流程图

    资料

    使用方法

    make run
    

    新建一个proto文件

    syntax = "proto3";
    
    package chat;
    
    service ChatService {
        //发送消息
        rpc Send(SendRequest) returns (SendReply){};
    }
    //发送消息 请求结构体
    message SendRequest {
        string content = 1;//发送内容
    }
    //发送消息 响应结构体
    message SendReply {
        string msg = 1;//返回消息
    }
    

    GRPC服务端

    package main
    
    import (
    	"context"
    	"github.com/yezihack/grpc/simple/server/proto"
    	"google.golang.org/grpc"
    	"log"
    	"net"
    	"os"
    )
    
    var (
    	port = ":8008"
    )
    
    func main() {
    	log.SetOutput(os.Stdout)
    	//新建一个tcp监听
    	lis, err := net.Listen("tcp", port)
    	if err != nil {
    		log.Fatalln(err)
    	}
    	//起一个服务
    	s := grpc.NewServer()
    	// 注册反射服务 这个服务是CLI使用的 跟服务本身没有关系
    	chat.RegisterChatServiceServer(s, &Chats{})
    	log.Printf("server port %s start...
    ", port)
    	//启动服务
    	if err = s.Serve(lis); err != nil {
    		log.Fatalln(err)
    	}
    }
    
    //新建一个结构体,实现proto里定义的方法
    type Chats struct {
    }
    
    //实现proto方法
    func (c *Chats) Send(ctx context.Context, in *chat.SendRequest) (*chat.SendReply, error) {
    	out := chat.SendReply{
    		Msg: "hello " + in.Content,
    	}
    	return &out, nil
    }
    
    

    客户端代码

    package main
    
    import (
    	"context"
    	"github.com/yezihack/grpc/simple/server/proto"
    	"google.golang.org/grpc"
    	"log"
    	"os"
    )
    
    var (
    	addrees = "localhost:8008"
    )
    
    func main() {
    	log.SetOutput(os.Stdout)
    	conn, err := grpc.Dial(addrees, grpc.WithInsecure())
    	if err != nil {
    		log.Fatalln(err)
    	}
    	client := chat.NewChatServiceClient(conn)
    	req := chat.SendRequest{
    		Content: "world 2019",
    	}
    	reply, err := client.Send(context.Background(), &req)
    	if err != nil {
    		log.Fatalln(err)
    	}
    	log.Println(reply.Msg)
    
    }
    
    

    代码归档: https://github.com/yezihack/grpc

  • 相关阅读:
    window 安装使用npm
    php 身份证验证类
    php nl2br 将 变成<br />
    win10 system guard运行时监视器,关闭服务
    PHP7 引入的“??” 和“?:”的区别
    git 本地删除修改文件后从远程拉取
    深入解读阿里云Redis开发规范
    阿里云Redis开发规范
    Centos7 安装docker
    api-doc-php
  • 原文地址:https://www.cnblogs.com/300js/p/10863243.html
Copyright © 2011-2022 走看看