跳转到主要内容

使用Protobuf服务的简单RPC

项目描述

hyper-rpc

Build Status

使用Protobuf服务的简单RPC

底层使用 grpcio_toolspurerpc

安装

$ pip install hyper-rpc

示例

TLDR; 查看示例目录 example

greeter.proto 中定义RPC服务。

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  rpc SayHelloGoodbye (HelloRequest) returns (stream HelloReply) {}
  rpc SayHelloToMany (stream HelloRequest) returns (stream HelloReply) {}
  rpc SayHelloToManyAtOnce (stream HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

然后使用 hyper-rpc 生成服务和存根。

$ pip install hyper-rpc
$ hrpc greeter.proto

这会创建 greeter_gprc.py (服务) 和 greeter_pb2.py (存根) 文件。

然后您可以编写一个异步服务器。

"""Greeter server."""

from greeter_grpc import GreeterServicer
from greeter_pb2 import HelloReply, HelloRequest
from purerpc import Server


class Greeter(GreeterServicer):
    async def SayHello(self, message):
        return HelloReply(message=f"Hello {message.name}")

    async def SayHelloToMany(self, input_messages):
        async for message in input_messages:
            yield HelloReply(message=f"Hello, {message.name}")


if __name__ == "__main__":
    server = Server(50055)
    server.add_service(Greeter().service)
    server.serve(backend="trio")

和客户端。

"""Greeter client."""

import anyio
import purerpc
from greeter_grpc import GreeterStub
from greeter_pb2 import HelloReply, HelloRequest


async def gen():
    for i in range(5):
        yield HelloRequest(name=str(i))


async def main():
    async with purerpc.insecure_channel("localhost", 50055) as channel:
        stub = GreeterStub(channel)
        reply = await stub.SayHello(HelloRequest(name="World"))
        print(reply.message)

        async for reply in stub.SayHelloToMany(gen()):
            print(reply.message)


if __name__ == "__main__":
    anyio.run(main, backend="trio")

并在单独的终端中运行它们以查看输出。

$ python server.py # terminal 1
$ python client.py # terminal 2

输出

Hello, World
Hello, 0
Hello, 1
Hello, 2
Hello, 3
Hello, 4

去进行远程过程调用 Remote Procedure Call

The person who invented the term RPC

项目详情


下载文件

下载适合您平台的应用程序文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

hyper-rpc-0.0.1a4.tar.gz (15.5 kB 查看哈希值)

上传时间:

构建分发

hyper_rpc-0.0.1a4-py3-none-any.whl (15.3 kB 查看哈希值)

上传于 Python 3

支持者