Python 으로 간단 한 gRPC 서 비 스 를 작성 하 는 상세 한 과정
Python 으로 간단 한 gRPC 서 비 스 를 작성 합 니 다.
grpc 홈 페이지 python 참조:https://www.grpc.io/docs/languages/python/quickstart/
http://grpc.github.io/grpc/python/grpc.html
grpcio-tools 는 주로 우리 의 protocol buffer 정의 에 따라 Python 코드 를 생 성 합 니 다.공식 적 으로 는 Protobuf code generator for gRPC 라 고 설명 합 니 다.
#apt install python3-pip
pip install grpcio
pip install protobuf
pip install grpcio_tools
proto 파일 작성proto 는 프로 토 콜 파일 입 니 다.클 라 이언 트 와 서버 의 통신 인 터 페 이 스 는 바로 proto 파일 협정 을 통 해 서로 다른 언어 에 따라 대응 하 는 코드 파일 을 생 성 할 수 있 습 니 다.
heartbeat.proto 파일:
syntax = "proto3";
message HeartbeatRequest{
string Host = 1;
int32 Mem = 2;
int32 Disk = 3;
int32 Cpu = 4;
int64 Timestamp = 5;
int64 Seq = 6;
}
message HeartbeatResponse{
int32 ErrCode = 1;
string ErrMsg = 2;
}
heartbeat_service.proto
syntax = "proto3";
import "heartbeat.proto";
// HeartBeatService
service HeartBeatService{
rpc HeartBeat(HeartbeatRequest) returns(HeartbeatResponse){}
}
핵심 은 데이터 형식 이 필요 한 파일 을 만 드 는 데 사용 되 는 것 입 니 다.하 나 는 호출 방법 을 만 드 는 데 사용 되 는 클래스 입 니 다.정의 데이터 형식proto 를 통 해.py 파일 생 성
proto 파일 은 protoc 를 통 해 대응 하 는.py 파일 을 생 성 해 야 합 니 다.protoc 의 아래로 딩 주소.압축 해제 디 렉 터 리 를 path 환경 변수 에 추가 합 니 다.
pip install grpcio
install grpcio-tools
#pip install --upgrade protobuf
메모:[아래 명령 은 proto 파일 이 있 는 디 렉 터 리 에서 실 행 됩 니 다.-I 는 proto 디 렉 터 리 를 지정 하 는 데 사 용 됩 니 다.]
python -m grpc_tools.protoc -I=. --python_out=.. heartbeat.proto
python -m grpc_tools.protoc -I=. --grpc_python_out=.. heartbeat_service.proto
서버
#!/usr/bin/env python
# coding=utf-8
import sys
from concurrent import futures
import time
import grpc
from google.protobuf.json_format import MessageToJson
import heartbeat_service_pb2_grpc
import heartbeat_pb2
from lib.core.log import LOGGER
class HeartBeatSrv(heartbeat_service_pb2_grpc.HeartBeatServiceServicer):
def HeartBeat(self, msg, context):
try:
# LOGGER.info(MessageToJson(msg, preserving_proto_field_name=True))
body = MessageToJson(msg, preserving_proto_field_name=True)
LOGGER.info("Get Heartbeat Request: %s", body)
response = heartbeat_pb2.HeartbeatResponse()
response.ErrCode = 0000
response.ErrMsg = "success"
return response
except Exception as e:
print("exception in heartbeat")
LOGGER.error("RPC Service exception: %s", e)
response = heartbeat_pb2.HeartbeatResponse()
response.ErrCode = 500
response.ErrMsg = "rpc error: %s" % e
return response
def server(host, rpc_port):
# thread pool server
# ,concurrent.futures ,
grpc_server = grpc.server(futures.ThreadPoolExecutor(max_workers=100))
# SSL
grpc_server.add_insecure_port('[::]' + ':' + str(rpc_port))
# This method is only safe to call before the server is started.
# HeartBeatSrv( )
heartbeat_service_pb2_grpc.add_HeartBeatServiceServicer_to_server(HeartBeatSrv(), grpc_server)
# , start()
#
grpc_server.start()
LOGGER.info("server start...")
while 1:
time.sleep(10)
#grpc_server.wait_for_termination()
def main():
try:
LOGGER.info("begin start server")
rpc_port = 8090
host = "::"
server(host, rpc_port)
except Exception as e:
LOGGER.error("server start error: %s", e)
time.sleep(5)
if __name__ == '__main__':
LOGGER.info(sys.path)
main()
클 라 이언 트
from time import sleep
import grpc
import heartbeat_pb2
import heartbeat_service_pb2_grpc
from lib.core.log import LOGGER
def run(seq):
option = [('grpc.keepalive_timeout_ms', 10000)]
#
with grpc.insecure_channel(target='127.0.0.1:8090', options=option) as channel:
#
stub = heartbeat_service_pb2_grpc.HeartBeatServiceStub(channel)
# stub
response = stub.HeartBeat(heartbeat_pb2.HeartbeatRequest(Host='hello grpc', Seq=seq), timeout=10)
LOGGER.info("response ErrCode:%s", response.ErrCode)
if __name__ == '__main__':
for i in range(1, 10000):
LOGGER.info("i: %s", i)
sleep(3)
run(i)
레 퍼 런 스Python 을 사용 하여 gRPC 통신 실현
참조 URL:https://zhuanlan.zhihu.com/p/363810793
python grpc 구성 서비스
https://www.jianshu.com/p/10d9ca034567
python grpc 서버 와 클 라 이언 트 호출 demo
참조 URL:https://blog.csdn.net/qq_42363032/article/details/115282405
파 이 썬 으로 간단 한 gRPC 서 비 스 를 작성 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 gRPC 서비스 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.