Skip to main content

An Object-oriented Binary RPC Framework

Project description

xrpc

An Object-oriented Binary RPC Framework

Library Usage

1. define service interface (.xidl)

// Greeter.xidl
class HelloReq {
    Str name
}

class HelloReply {
    Str msg
}

class Greeter {
    HelloReply sayHello(HelloReq req)
    sendFile(self, Stream)
}

2. generate code from xidl

xrpc-gen python Greeter.xidl

will got file Greeter.py

# Greeter.py
    class Greeter 接口定义
    class PrGreeter 代理
    class SrGreeter 服务

3. 实现服务

  1. 继承并实现SrGreeter
class GreeterService(SrGreeter):
    def sayHello(req: HelloReq) -> HelloReply:
        print('hello %s' % req.name)
        return HelloReply('Hello, ', req.name)

    def sendFile(file: Stream) -> None:
        save_dir = '__temp/'
        if not os.path.exists(save_dir):
            os.mkdir(save_dir)
        s = FileWriterStream(file, save_dir + file.name)
        self.channel.registerStream(s) # will receive the stream
  1. 继承并实现默认服务SrPeer的查找服务接口
class MyPeerService(SrPeer):
    def getService(name: str) -> IInterface:
        if name == Greeter.__name__:
            return GreeterService(self.channel)
        raise ValueError("service not found!")

4. 启动服务

config = Config()
peer = MyPeerService(config)
conn = WSConnection() # use websocket
async with conn.start(peer, 'greeter') as (ip, port):
    # server started, show qrcode
    qr = qrcode.QRCode()
    qr.border = 1
    qr.add_data("%s://%s:%d" % (conn.protocol, ip, port))
    qr.print_ascii(invert=True)
    await asyncio.Future() # wait forever

示例发布了一个名为greeter的websocket服务, 该服务可在局域网内自动发现

5. 调用服务接口

config = Config()
conn = WSConnection() # use websocket
async with conn.connect('greeter', config) as peer:
    # find service
    obj = await peer.getService(Greeter.__name__)
    greeter = PrGreeter(obj)

    # normal rpc call
    ret = await greeter.sayHello(HelloMsg('Daniel'))
    print(ret.msg) # Hello, Daniel
    
    # Send file
    file = FileReaderStream('file.txt')
    await greeter.sendFile(file) # call sendFile
    await peer.channel.sendStream(file) # send file stream

查找并连接名为greeter的websocket 服务

6. 加密握手协议

config中传入handshake即可配置握手协议. 协议实现HandShakeProtocal

config = Config(handshake=HandShakeV1())

握手和加密方式可自定义

7. 使用其他的连接协议

目前支持使用websocket(WSConnection)和tcp连接协议(TCPConnection), 如果想要自定义协议, 请实现Connection

conn = MyCustomConnection() # use custom connection protocal

8. 局域网发现

默认打开局域网发现功能, 如果想要关闭, 则在启动服务时传入参数discoverable=False

async with conn.start(peer, name, discoverable=False) as (ip, port):
    ...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oorpc-0.1.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oorpc-0.1.0-py3-none-any.whl (30.0 kB view details)

Uploaded Python 3

File details

Details for the file oorpc-0.1.0.tar.gz.

File metadata

  • Download URL: oorpc-0.1.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.10 Darwin/23.1.0

File hashes

Hashes for oorpc-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3558e685e1c26055c258a05a985bf76f0df5c7f3085c591eca65d028d340dbb5
MD5 d596bc4c192ff6a3f1b39bd1e3c32fe2
BLAKE2b-256 2abec65d0d5f38c738ad5640abb08fac795dbc2e30bbe0aa25171551108e9fd2

See more details on using hashes here.

File details

Details for the file oorpc-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: oorpc-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 30.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.10 Darwin/23.1.0

File hashes

Hashes for oorpc-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b6a4655a476166b587a64d5ae9dc8d1c7533523ac9983547cdc5236182330160
MD5 c6ce8e5a6b4512bae05799842f35aea0
BLAKE2b-256 4384c1331a8eecc47d422475f8830e27cd058e452963cf214cc798a7f0e1a152

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page