我是靠谱客的博主 义气母鸡,最近开发中收集的这篇文章主要介绍gRPC实现简单helloworld,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用golang,结合gRPC,实现远程调用,输出 hello world
关于gRPC的安装看《centos7安gRPC》



流程如下:

 1. 编写 .proto文件
 2. 用 protoc 工具生成go代码
 3. 编写 gRPC 服务端
 4. 编写 gRPC 客户端
 5. 运行测试


目录结构如下图示例:

1. 编写proto文件

syntax = "proto3";
// 指定proto版本,有多个版本,3是最新版本,更轻量化,支持更多语言

// 定义包名
package hello;

// 定义请求信息结构
message HelloRequest{
    string name = 1;
}

// 定义响应信息结构
message HelloResponse{
    string message = 1;
}

// 定义Hello服务
service Hello{
    // 定义服务中的方法
    rpc SayHello(HelloRequest)returns(HelloResponse){}
}

2. 生成go文件

protoc -I . --go_out=plugins=grpc:. ./hello.proto

3. 编写rpcServer文件

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	hello "imooc.com/tttt/t-grpc/hello/proto"
	"net"
)

type rpcServer struct{}

// 定义rpc服务的方法
func (s *rpcServer) SayHello(ctx context.Context,
	in *hello.HelloRequest) (*hello.HelloResponse, error) {
	return &hello.HelloResponse{
		Message: "hello " + in.Name,
	}, nil
}

func main() {
	// 新建tcp监听通道
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		panic(err)
	}

	// 实例化gRPC server
	server := grpc.NewServer()
	// 注册 server
	hello.RegisterHelloServer(server, &rpcServer{})

	fmt.Println("Listen on localhost:8080")
	// 启动监听
	server.Serve(listener)
}

4. 编写rpcClient文件

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/grpclog"
	hello "imooc.com/tttt/t-grpc/hello/proto"
)

func main() {
	// 连接rpc通道
	conn, err := grpc.Dial("localhost:8080", grpc.WithInsecure())
	if err != nil {
		grpclog.Fatalln(err)
	}
	defer conn.Close()

	// 初始化客户端
	cli := hello.NewHelloClient(conn)

	// 调用方法
	reqBody := &hello.HelloRequest{Name: "world"}
	res, err := cli.SayHello(context.Background(), reqBody)
	if err != nil {
		grpclog.Fatalln(err)
	}

	fmt.Println(res.Message)
}

运行服务端程序,输出如下图

运行客户端程序,输出如下图

最后

以上就是义气母鸡为你收集整理的gRPC实现简单helloworld的全部内容,希望文章能够帮你解决gRPC实现简单helloworld所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部