golang grpc demo

1創建proto文件 並 編譯

protoc --go_out=plugins=grpc:. hello.proto
syntax = "proto3";

option objc_class_prefix = "HLW";

package go.srv.hello;
service helloService {
    rpc Hello(Msg) returns (Response) {}
}
message Msg {
    string msg = 1;
}
message Response {
    string msg = 1;
}

2編寫server代碼

package hello

import (
	"context"
	"fmt"
	pb "zl-go/DemoDir/internal/proto/hello"
)

type Server struct {}

func (s *Server) Hello(ctx context.Context, in *pb.Msg) (*pb.Response, error) {
	fmt.Println("request: ", in.Msg)
	return &pb.Response{Msg: "Hello " + in.Msg}, nil
}

3編寫運行代碼

package init

import (
	"fmt"
	"google.golang.org/grpc"
	"net"
	"zl-go/DemoDir/internal/server/grpc/hello"
	pb "zl-go/DemoDir/internal/proto/hello"
)

func init()  {
	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 50001))
	if err != nil {
		fmt.Println("failed to listen: %v", err)
	}
	grpcServer := grpc.NewServer()
	pb.RegisterHelloServiceServer(grpcServer, &hello.Server{})
	grpcServer.Serve(lis)
}

4編寫客戶端代碼

package main

import (
	"log"
	"os"
	pb "zl-go/DemoDir/internal/proto/hello"
	"golang.org/x/net/context"
	"google.golang.org/grpc"
)

const (
	address = "localhost:50001"
)

func main() {
	conn, err := grpc.Dial(address, grpc.WithInsecure())

	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}

	defer conn.Close()

	c := pb.NewHelloServiceClient(conn)

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

	r, err := c.Hello(context.Background(), &pb.Msg{Msg: name})

	if err != nil {
		log.Fatalf("could not greet: %v", err)
	}

	log.Println(r.Msg)
}

demo地址:(//download.csdn.net/download/qq_35513598/11964608)

 

demo初始化:

編譯proto文件--腳本在scripts目錄下

cd %GOPATH%/src/zl-go/DemoDir/internal/proto/hello
protoc --go_out=plugins=grpc:. hello.proto

服務端代碼在  init/initGrop.go 中

運行cmd/myapp/main.go(服務端)

運行examples/demoHelloCli.go(客戶端)

發佈了25 篇原創文章 · 獲贊 28 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章