golang grpc服务端客户端简单源码实现

协议

hello.proto 文件

Syntax = "proto3";
package hello;
 
message HelloRequest {
string greeting = 1;
}
 
message HelloResponse {
string reply = 1;
repeated int32 number = 4;
}
 
service HelloService {
rpc SayHello(HelloRequest) returns (HelloResponse) {}
}

服务端代码

// test_grpc project test_grpc.go
package main

import (
	"flag"
	"fmt"
	"log"
	"net"
	pb "proto"

	context "golang.org/x/net/context"
	"google.golang.org/grpc"
)

type server struct{}

func (s *server) SayHello(ctx context.Context,in *pb.HelloRequest) (*pb.HelloResponse,error) {
	//fmt.Println("hello")
	if in.Greeting == "helloworld" {
		return &pb.HelloResponse{in.Greeting,[]int32{1,2}},nil
	} else {
		return &pb.HelloResponse{"fjgui",[]int32{666}},nil
	}
	//return &pb.HelloResponse{"fjgui",nil
}

func main() {
	port := flag.Int("port",8000,"the server")
	lis,err := net.Listen("tcp",fmt.Sprintf("127.0.0.1:%d",*port))
	if err != nil {
		log.Fatalf("Failed to listen: %v",err)
	}

	s := grpc.NewServer()
	pb.RegisterHelloServiceServer(s,&server{})
	s.Serve(lis)
}
客户端代码
// test_grpc_client project test_grpc_client.go
package main

import (
	"flag"
	"fmt"
	"log"
	"os"
	pb "proto"

	context "golang.org/x/net/context"
	"google.golang.org/grpc"
)

func main() {
	address := flag.String("addressfjgui","127.0.0.1:8000","The server address in the format of host:port")
	conn,err := grpc.Dial(*address,grpc.WithInsecure())
	if err != nil {
		log.Fatalf("did not connect:%v",err)
	}

	defer conn.Close()
	c := pb.NewHelloServiceClient(conn)

	req_greeting := "helloworld"
	if len(os.Args) > 1 {
		req_greeting = os.Args[1]
	}

	r,err := c.SayHello(context.Background(),&pb.HelloRequest{req_greeting})
	fmt.Println(req_greeting)
	if err != nil {
		log.Fatalf("could not greet: %v",err)
	}
	log.Printf("Greeting: %v",r.Reply)
	log.Printf("Greeting: %v",r.Number)
}

相关文章

程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息...
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简...
简介 默克尔树(MerkleTree)是一种典型的二叉树结构,其主要特点为: 最下面的叶节点包含存储数据或其...
接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本...
先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶...
第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装,...