grpc-go 安裝
需求 Go 1.7 以上
使用 go get 安裝代碼庫
go get -u google.golang.org/grpc
- 安裝 protocol buffers v3
# mac os 下使用 homebrew 安裝
brew install automake
brew install libtool
brew install protobuf
# cenos 7
1.下載源碼包开呐,解壓娜谊,編譯安裝
地址:https://github.com/google/protobuf/releases 選擇Source code (tar.gz)下載
2 編譯安裝
tartar -zxvf protobuf- -zxvf prot 3.1.0.tar.gz -C /usr/local/
cd protobuf-3.1.0/
# 如果使用的不是源碼堵漱,而是release版本 (已經(jīng)包含gmock和configure腳本),可以略過這一步
./autogen.sh
# 指定安裝路徑
./configure --prefix=/usr/local/protobuf
#編譯
make
# 測試叽躯,這一步很耗時間
make check
make install
# refresh shared library cache.
ldconfig
注意make check這一步會花費(fèi)比較多的時間
3、設(shè)置一下環(huán)境變量 /etc/profile
# (動態(tài)庫搜索路徑) 程序加載運(yùn)行期間查找動態(tài)鏈接庫時指定除了系統(tǒng)默認(rèn)路徑之外的其他路徑
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib
# (靜態(tài)庫搜索路徑) 程序編譯期間查找動態(tài)鏈接庫時指定查找共享庫的路徑
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib
export PATH=$PATH:/usr/local/protobuf/bin
4、查看版本
protoc --version
之后唤衫,對于相同的系統(tǒng)環(huán)境,就不需要再編譯了铐殃,直接將編譯好的protobuf(目錄:/usr/local/protobuf)分發(fā)到其他
官方 example 運(yùn)行
- server 建立
package main
import (
"log"
"net"
"golang.org/x/net/context"
"google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
"google.golang.org/grpc/reflection"
)
const (
port = ":50051"
)
// server is used to implement helloworld.GreeterServer.
type server struct{}
// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
func main() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
- client 建立
package main
import (
"log"
"net"
"golang.org/x/net/context"
"google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
"google.golang.org/grpc/reflection"
)
const (
port = ":50051"
)
// server is used to implement helloworld.GreeterServer.
type server struct{}
// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
func main() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}