我的目标是与我的gRPC服务器(启用反射)进行通信,而客户端不熟悉服务器协议文件,因此我只需要使用端口号查找服务器
我正在尝试使用socket.getservbyport查找我的gRPC服务器,并获取“port/proto not found”异常。 我知道我的服务器已启动&;在这个端口上运行。我错过了什么
服务器端:
from concurrent import futures
import logging
import grpc
from grpc_reflection.v1alpha import reflection
import helloworld_pb2
import helloworld_pb2_grpc
class Greeter(helloworld_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
SERVICE_NAMES = (
helloworld_pb2.DESCRIPTOR.services_by_name['Greeter'].full_name,
reflection.SERVICE_NAME,
)
reflection.enable_server_reflection(SERVICE_NAMES, server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
客户端:
import socket
def find_service_name():
for port in [25, 80, 50051]:
print("Port: %s => service name: %s" % (port, socket.getservbyport(port)))
def run():
try:
find_service_name()
except Exception as e:
print(e)
with grpc.insecure_channel('localhost:50051') as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))
print(response)
if __name__ == '__main__':
logging.basicConfig()
run()
输出:
Port: 25 => service name: smtp
Port: 80 => service name: http
port/proto not found
message: "Hello, you!"
Python的
getservbyport
是围绕同名系统调用的包装器(请参见relevant source code中的cpython)系统调用(文档here)查看服务数据库:
{}所指向的{a3}只是(引用):
因此,您看到的是您的服务器没有出现在服务数据库中。这并不奇怪,因为AFAIK没有将您的服务添加到数据库中
相关问题 更多 >
编程相关推荐