gRPC遠端過程呼叫之golang

2021-08-29 01:50:00 字數 2628 閱讀 6599

grpc是google出品,支援多種語言,但是國內安裝會有點問題,下面整理一下,方便今後配環境的複習。

go get google.golang.org/grpc
結果出現了如下錯誤:

package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: get  dial tcp 216.239.37.1:443: i/o timeout)
參考 可以使用如下方式進行安裝。

make install漫長等待後,就完事了。不過這次還沒完,好像是需要將乙個環境變數加到path中。

export ld_library_path=/usr/local/lib
helloworld.proto放到$gopath/src/helloworld目錄下,方便自己待會的引用。

syntax = "proto3";

package grpcusage;

service hello

}message hellorequest

message helloreply

然後通過protoc 根據此模板來生成對應的golang的grpc**

#格式 protoc --go_out=plugins=grpc: 

protoc --go_out=plugins=grpc:./ ./helloworld.proto

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) , nil

}func main()

fmt.println("grpc server listening at: 50051 port")

server := grpc.newserver()

pb.registerhelloserver(server, &server{})

server.serve(conn)

}

package main

import (

"google.golang.org/grpc"

"log"

pb "helloworld"

"os"

"context"

"fmt"

)const (

address = "localhost:50051"

defaultname = "郭璞"

)func main()

defer conn.close()

client := pb.newhelloclient(conn)

name := defaultname

if len(os.args) > 1

request, err := client.sayhello(context.background(), &pb.hellorequest)

if err != nil

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中的簡單使用,暫且記錄下,以備不時之需。

遠端過程呼叫

遠端過程呼叫 rpc remote procedure call protocol 遠端過程呼叫協議 它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。為通訊程式之間攜帶資訊資料。採用客戶端 伺服器方式 請求 響應 三種主流的實現方式 rest soap xmlrpc xml...

遠端過程呼叫 RPC

rpc是遠端過程呼叫 remote procedure call 的縮寫。就是一台伺服器上的服務通過引數傳遞的方式呼叫另一台服 務器的服務,並獲取返回結果。比如有兩台伺服器a b,a上的服務想要呼叫b上的函式或方法,由於不在同乙個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義和傳達呼叫的資料...

Hadoop 遠端過程呼叫

hadoop ipc類圖如下 連線 font size 14px 為了提高通訊效率,連線是可以復用的,通過connectionid來區分不同的連線 class connectionid connectionheader類是客戶端和服務端tcp連線建立之後交換的第一條訊息,包括connectionid...