• 学习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

  • 相关阅读:
    drf中ListSerializer源码
    drf中get/post/delete/put/patch五大接口
    drf三大认证组件
    drf序列化与反序列化,基表的概念
    drf序列化与反序列化
    drf解析,异常,响应模块
    drf 简介以及部分源码分析
    vue学习第四天
    vue学习第三天
    MySQLStudy——索引
  • 原文地址:https://www.cnblogs.com/300js/p/10863243.html
Copyright © 2020-2023  润新知