跨語言的GRPC呼叫

2021-10-20 16:45:13 字數 2636 閱讀 6628

這次我們測試go與python之間的grpc呼叫。go作為grpc的客戶端,python作為grpc的服務端。

第一步:安裝go的grpc工具;

第二步:安裝python的grpc工具;

pip install grpcio-tools
首先新建hello.proto檔案,該檔案很簡單,就是定義了乙個服務介面的方法sayhello,該方法入參是乙個hellorequest訊息,返回值是helloreply訊息。

syntax = 'proto3';

message hellorequest

message helloreply

service helloserver

}

定義完成後,分別在go環境和python環境執行protoc命令進行編譯。

# go

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

# python

python -m grpc_tools.protoc -i. --python_out=

.. --grpc_python_out=

.. hello.proto

編譯完成後,開始編寫客戶端和服務端程式。

package main

import

("context"

"fmt"

"google.golang.org/grpc"

pt "grpc/protos"

)const

( server_port =

"192.168.88.111:8000"

)// grpc客戶端呼叫python實現的grpc服務端程式

func

main()

defer conn.

close()

// 建立grpc客戶端

cli := pt.

newhelloserverclient

(conn)

// 遠端呼叫sayhello方法

reply, err := cli.

sayhello

(context.

background()

,&pt.hellorequest

)if err !=

nil fmt.

println

("message = "

, reply.message)

}

import hello_pb2_grpc

import hello_pb2

import grpc

from concurrent import futures

import time

# 實現服務介面

class

helloserverservicer

(hello_pb2_grpc.helloserverservicer)

:def

sayhello

(self, request, context)

: msg = request.name +

" hello"

return hello_pb2.helloreply(message=msg)

# 開啟伺服器,對外提供rpc呼叫

defserve()

:# 建立多執行緒的伺服器物件

server = grpc.server(futures.threadpoolexecutor(max_workers=10)

)# 註冊實現服務的方法到伺服器物件中

hello_pb2_grpc.add_helloserverservicer_to_server(helloserverservicer(

), server)

# 為伺服器繫結ip位址和埠

server.add_insecure_port(

'192.168.88.111:8000'

)# 開啟服務

print

('伺服器已開啟'

) server.start(

)# 關閉服務

# 使用 ctrl+c 可以退出服務

try:

time.sleep(

1000

)except keyboardinterrupt:

server.stop(0)

if __name__ ==

'__main__'

: serve(

)

防火牆需要開啟8000埠:

sudo ufw allow 8000
測試結果:成功

grpc 服務呼叫例子

1.建立乙個hello.proto 其實就是定義乙個服務,然後後面需要實現它的介面 syntax proto3 path 表示生成的go檔案的存放位址,會自動生成目錄的。name 表示生成的go檔案所屬的包名 option go package hello package hello service...

erlang c 跨語言呼叫設計

我們的 倉庫裡面存在很多c語言的庫,基於執行效率或工作量的考慮,我們不想 使用erlang重寫相關庫,我們想在erlang中像使用erlang庫一樣方便地使用c庫,vcall erlang版 正是在這種背景下出現的。vcall erlang版本 後面簡稱 vcall。使用vcall時,我們只需要呼叫...

go語言 grpc入門

go get google.golang.org grpc1.編寫.proto描述檔案 hello.proto syntax proto3 package proto message string service helloservice2.使用protoc工具生成相應的go 生成的 與porto描...