我是grpc的新手。我很难理解它。无论如何,我是基于一个名为:image.proto的原型文件工作的。
下面是我的image.proto文件的内容:
syntax = "proto3";
option java_multiple_files = true;
message NLImage {
bool color = 1;
bytes data = 2;
int32 width = 3;
int32 height = 4;
}
message NLImageRotateRequest {
enum Rotation {
NONE = 0;
NINETY_DEG = 1;
ONE_EIGHTY_DEG = 2;
TWO_SEVENTY_DEG = 3;
}
Rotation rotation = 1;
NLImage image = 2;
}
service NLImageService {
rpc RotateImage(NLImageRotateRequest) returns (NLImage);
rpc MeanFilter(NLImage) returns (NLImage);
}我能够创建一个server.py文件和client.py。我还从image_pb2.py文件中生成了image.proto,并生成了image_pb2_grpc.py。
现在,我不得不将图像旋转请求从客户机发送到服务器,并得到适当的响应。
以下是我到目前为止在我的client.py中尝试过的东西
import grpc
# import the generated files
import image_pb2
import image_pb2_grpc
#.......
#.......SEVERAL LINES OF CODE LATER
#.......
print('Input image path is', inputfile)
print('Output path is', outputfile)
print('Mean is', mean)
print("Rotate is", rotate)
channel = grpc.insecure_channel('localhost:5000')
stub = image_pb2_grpc.NLImageServiceStub(channel)
# SEND ROTATION REQUEST IF rotate
img_rotate_request = image_pb2.NLImageRotateRequest()
stub.RotateImage(img_rotate_request, inputfile)我不知道如何正确地发送RotateImage请求。
下面是我的server.py:
import sys, getopt
from google.protobuf.descriptor import EnumDescriptor
import grpc
from concurrent import futures
import time
import numpy as np
# importing grpc generated classes
import image_pb2
import image_pb2_grpc
class NLImageServiceServicer(image_pb2_grpc.NLImageServiceServicer):
def RotateImage(self, request, context):
print("Request to rotate image received")
return image_pb2._NLIMAGE()
def MeanFilter(self, request, context):
print("Request to filter received")
return image_pb2.NLImage()
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
image_pb2_grpc.add_NLImageServiceServicer_to_server(NLImageServiceServicer, server)
server.add_insecure_port( host + ":" + str(port))
server.start()
print("Server started ...on " + host + ":" + port)
server.wait_for_termination()发布于 2021-01-10 20:12:15
看着你的代码,它看起来还好;我还没有运行它。
您正确地调用了方法:stub.RotateImage,但是您没有正确地为它创建消息类型(NLImageRotateRequest)。它将是protoc (可能是image_pb2.NLImageRotateRequest )为您生成的类的一个实例,其中包含rotation和image属性。image本身就是类image_pb2.Image等的一个实例。
请查看这个链接与Python一起使用protobuf,因为每种语言都是不同的,而且Python在创建消息方面有一些古怪之处。
在某种程度上,您需要以字节形式读取inputfile,以填充image的data属性。
如果没有,可以在grpc.io上运行Python示例。它是基本的,但它将使您开始使用gRPC。然后回顾我上面包含的链接和Python的protobuf部分。
https://stackoverflow.com/questions/65637153
复制相似问题