這次我們測試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描...