【问题标题】:cant find grpc server using socket.getservbyport使用 socket.getservbyport 找不到 grpc 服务器
【发布时间】:2020-06-15 05:32:40
【问题描述】:

我的目标是通过不熟悉服务器 proto 文件的客户端与我的 gRPC 服务器(启用反射)进行通信,因为我只需要使用端口号来查找服务器。

我正在尝试使用 socket.getservbyport 查找我的 gRPC 服务器并得到“未找到端口/原型”异常。 我知道我的服务器已启动并在此端口上运行。我在这里错过了什么?

服务器端:

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 grpc grpc-python


    【解决方案1】:

    Python 的getservbyport 是同名系统调用的包装器(请参阅relevant source code for cpython)。

    系统调用(文档here)查看服务数据库:

    getservbyport() 函数返回条目的服务结构 从与端口端口匹配的数据库中...

    getservbyport 去的services database 只是(引用):

    一个纯 ASCII 文件,提供人类友好的文本之间的映射 Internet 服务的名称及其底层分配的端口 编号和协议类型。

    所以,您看到的是您的服务器没有出现在服务数据库中。这并不奇怪,因为 AFAIK 没有将您的服务添加到数据库中。

    【讨论】:

    • 这能回答你的问题吗?
    猜你喜欢
    • 2020-02-10
    • 2020-11-03
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多