`
liu86th
  • 浏览: 119694 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

最新版grpc-demo

    博客分类:
  • Go
 
阅读更多

 

 

 

grpc-demo on windows

 

1. 生成proto文件

 

>1. 安装grpc protoc生成工具

# https://github.com/protocolbuffers/protobuf/releases

 

>2. golang安装支持.proto文件的plugins

#setting -> plugins -> search "protobuf support"

 

>3. 安装grpc

# go get -u google.golang.org/grpc

 

>4. 安装grpc依赖, 安装成功后,会在$GOPATH/bin目录下生成两个2进制文件

# go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

# go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

 

>5. 加入环境变量

# E:\Go-project\bin

 

6>. 编写data.proto

# mkdir proto

# mkdir ./proto/pb

 

syntax = "proto3";

package test;

option go_package="./pb";

message ProductRequest {

  int32 id = 1;

}

message ProductResponse {

  int32 stock = 1;

}

service ProService {

  rpc GetStockById(ProductRequest) returns (ProductResponse);

}

 

 

>7. 编译proto,生成data.pb.go和data_grpc.pb.go

#protoc --go_out=. --go-grpc_out=. *.proto

 

2. 编写服务器端代码

package main



import (

	"context"

	"fmt"

	"gitee.com/grpc-demo/proto/pb"

	"google.golang.org/grpc"

	"log"

	"net"

)



type Server struct {

	pb.UnimplementedProServiceServer

}



func (s *Server) GetStockById(ctx context.Context, pro *pb.ProductRequest) (*pb.ProductResponse, error) {

	// 业务处理

	return &pb.ProductResponse{

		Stock: pro.Id,

	}, nil

}



func main() {

	fmt.Println("start grpc server")

	listen, err := net.Listen("tcp", ":8012")

	if err != nil {

		log.Fatalf("fail to start server: %v", err)

	}



	s := grpc.NewServer()

	pb.RegisterProServiceServer(s, &Server{})

	err = s.Serve(listen)

	if err != nil {

		log.Fatalf("fail to start grpc-server: %v", err)

	}

}

 

 

3.编写客户端代码

package main



import (

	"context"

	"fmt"

	"gitee.com/grpc-demo/proto/pb"

	"google.golang.org/grpc"

	"google.golang.org/grpc/credentials/insecure"

	"log"

	"time"

)



func main() {

	fmt.Println("start client")

	conn, err := grpc.Dial("127.0.0.1:8012", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock())

	if err != nil {

		log.Fatalf("fail to dial: %v", err)

	}

	defer conn.Close()



	client := pb.NewProServiceClient(conn)

	ctx, cancel := context.WithTimeout(context.Background(), time.Second)

	defer cancel()





	req := &pb.ProductRequest{

		Id: 256,

	}

	res, err := client.GetStockById(ctx, req)

	if err != nil {

		log.Fatalf("get stock fail: %v", err)

	}

	log.Printf("get stock success: %v", res)

}

 

 

4. 启动服务器

#go run .\server\main.go

#go run .\client\main.go

 

分享到:
评论

相关推荐

    grpc-java-demo:本指南通过一个简单的示例使您开始使用Java中的gRPC。

    这是一篇关于google的grpc框架的java版本的入门demo从 进入java的学习指导页面# 克隆最新版本的栗子git clone -b v1.11.0 https://github.com/grpc/grpc-java# 进入项目cd grpc-java/examples/1.运行一个grpc应用# ...

    python-grpc-demo:Python + gRPC演示

    【Python + gRPC 演示】 ...这个压缩包文件 "python-grpc-demo-master" 包含了完整的示例代码,供你参考和实践。通过运行这些代码,你将能够更好地理解 gRPC 在 Python 中的工作原理,以及如何利用它构建分布式系统。

    Maven搭建Grpc项目详细流程附加grpc—java简单demo

    2. Maven的安装通常涉及下载最新版本的Maven(例如,Apache Maven 3.2.1)并配置环境变量。确保在命令行中输入`mvn --version`能看到正确版本的信息,表明安装成功。 接下来,我们需要将Maven集成到Eclipse中: 1....

    demo-grpc:演示版

    "demo-grpc"项目是一个示例,旨在帮助开发者了解并实践gRPC的基本用法。在这个项目中,我们很可能会找到如何创建、配置和运行gRPC服务的相关代码和文档。 gRPC是一个高性能、开源和通用的RPC(远程过程调用)框架,...

    google-assistant-java-demo:Java中的简单Google Assistant客户端

    版该自述文件是为最新版本编写的。 如果要获取关联的自述文件,请以所需版本签出项目。 v0.2.0:发布于2018年9月1日:可与Google Assistant SDK alpha2一起使用。 此版本允许您将Assistant SDK与新的GRPC绑定一起...

    junos-jet-demo-apps:面向所有人的Junos JET演示应用程序!

    接下来,安装最新版本的Go。 在撰写本文时,它是1.10.1,这是此演示的经过验证的工作版本。 下载链接在这里: : 。 在系统上安装Golang后,请确保已设置$ GOROOT和$ GOBIN环境变量。 您可以按照本指南来完成此步骤...

    Java实现Tron(波场)测试DEMO

    确保替换`版本号`为Tron SDK的最新稳定版本。接下来,我们创建一个Spring Boot应用,使用`@SpringBootApplication`注解来启用Spring的自动配置和组件扫描。 ```java import org.springframework.boot....

Global site tag (gtag.js) - Google Analytics