Библиотека grpc выдает "Метод не найден!" - PullRequest
0 голосов
/ 19 октября 2018
  • local env: Python2.7 & protobuf3.6 & grpc1.14
  • структура прото-файла

    ====== FILE pb/common.proto ======
    package pb
    message GetVersionReq { ... }
    message GetVersionRsp { ... }
    
    ====== FILE pb/nvr/preview.proto ======
    package nvr
    Import “pb/common.proto”
    
    service Previewer {
      rpc GetVersion(pb.GetVersionReq) return (pb.GetVersionRsp) {}
    }
    
  • Я закончил свойреализация GetVersion, но все еще встречается "Метод не найден!"ошибка.

  • Некоторые выводы:

    1. Как показано ниже, в библиотеке grpc сервер grpc извлекает событие из extension_queue , имя метода в событии равно pb.GetVersion , то, что я ожидал бы, было nvr.GetVersion .
    def _serve(state):
        while True:
            event = state.completion_queue.poll()
            if event.tag is _SHUTDOWN_TAG:
                with state.lock:
                    state.due.remove(_SHUTDOWN_TAG)
                    if _stop_serving(state):
                        return
            elif event.tag is _REQUEST_CALL_TAG:
                with state.lock:
                    state.due.remove(_REQUEST_CALL_TAG)
                    concurrency_exceeded = (
                        state.maximum_concurrent_rpcs is not None and
                        state.active_rpc_count >= state.maximum_concurrent_rpcs)
  1. Теперь я работаю над этой проблемой, удалив «import pb / common.pb» и определив GetVersionReq / Rsp в preview.proto напрямую, как показано ниже,

    ====== FILE pb/nvr/preview.proto ======
    message GetVersionReq { ... }
    message GetVersionRsp { ... }
    
    service Previewer {
      rpc GetVersion(GetVersionReq) return (GetVersionRsp) {}
    }
    
    • есть идеи?
...