使用Protobuf服务的简单RPC
项目描述
hyper-rpc
使用Protobuf服务的简单RPC
底层使用 grpcio_tools 和 purerpc。
安装
$ 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。
项目详情
下载文件
下载适合您平台的应用程序文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源分发
         hyper-rpc-0.0.1a4.tar.gz  (15.5 kB 查看哈希值)
      
    构建分发
         hyper_rpc-0.0.1a4-py3-none-any.whl  (15.3 kB 查看哈希值)