分享
  1. 首页
  2. 文章

gRPC远程过程调用之golang

尽情的嘲笑我吧 · · 3714 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

gRPC是Google出品,支持多种语言,但是国内安装会有点问题,下面整理一下,方便今后配环境的复习。

安装grpc

go get google.golang.org/grpc

结果出现了如下错误:

package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

参考 https://blog.csdn.net/cjj198561/article/details/78133193 可以使用如下方式进行安装。

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
 
cd $GOPATH/src/
go install google.golang.org/grpc

安装protocal buffer compiler

https://github.com/google/protobuf/releases

下载后使用源码安装,固定套路为:

tar -zxvf xxxx.tar.gz
cd xxxx/
./configure
make
make install

漫长等待后,就完事了。不过这次还没完,好像是需要将一个环境变量加到path中。

export LD_LIBRARY_PATH=/usr/local/lib

创建proto文件

helloworld.proto 放到 $GOPATH/src/helloworld 目录下,方便自己待会的引用。

syntax = "proto3";
package grpcusage;
service Hello {
 rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
 string Name = 1;
}
message HelloReply {
 string Message = 1;
}

然后通过protoc 根据此模板来生成对应的golang的grpc代码

#格式 protoc --go_out=plugins=grpc:{go代码输出路径} {proto文件}
protoc --go_out=plugins=grpc:./ ./helloworld.proto

gRPC代码编写

server.go

package main
import (
 "golang.org/x/net/context"
 pb "helloworld"
 "net"
 "log"
 "google.golang.org/grpc"
 "fmt"
)
const (
 port = ":50051"
)
type Server struct {}
func (s *Server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
 return &pb.HelloReply{
 Message: "hello " + in.Name,
 }, nil
}
func main() {
 conn, err := net.Listen("tcp", port)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("grpc server listening at: 50051 port")
 server := grpc.NewServer()
 pb.RegisterHelloServer(server, &Server{})
 server.Serve(conn)
}

client.go

package main
import (
 "google.golang.org/grpc"
 "log"
 pb "helloworld"
 "os"
 "context"
 "fmt"
)
const (
 address = "localhost:50051"
 defaultName = "郭璞"
)
func main() {
 conn, err := grpc.Dial(address, grpc.WithInsecure())
 if err != nil {
 log.Fatal(err)
 }
 defer conn.Close()
 client := pb.NewHelloClient(conn)
 name := defaultName
 if len(os.Args) > 1 {
 name = os.Args[1]
 }
 request, err := client.SayHello(context.Background(), &pb.HelloRequest{Name:name})
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println(request.Message)
}

测试服务

启动server端程序。

➜ grpcusage go run server.go
grpc server listening at: 50051 port

启动client程序

➜ client go run client.go
hello 郭璞
➜ client

如此便实现了grpc在golang中的简单使用,暂且记录下,以备不时之需。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:尽情的嘲笑我吧

查看原文:gRPC远程过程调用之golang

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3714 次点击
1 回复 | 直到 2018年10月15日 11:35:25
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏