Skip to main content

An Object-oriented Binary RPC Framework

Project description

oorpc

An Object-oriented Binary RPC Framework

Library Usage

0. Example

Please refer example

  1. start server
poetry install
poetry run python example/server.py
  1. run client to test
poetry run python example/client.py

接下来是详细步骤.

1. Define service interface (.xidl)

// greeter.xidl
class NameCard {
    Str name
    Num age
    Str intro
}

class Greeter {
    NameCard exchangeNameCard(NameCard card)
    void sendFile(self, Stream file)
}

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):
    async def exchangeNameCard(self, card: NameCard) -> NameCard:
        print('Got name card:')
        print('\tname:', card.name)
        print('\tage:', card.age)
        print('\tintro:', card.intro)
        return NameCard('GG', 100, 'I am the Greeter Service')
    
    async def sendFile(self, file: xfmt.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)
  1. 继承并实现默认服务PeerService的查找服务接口
class MyPeerService(PeerService):
    async def getService(self, name: str) -> IInterface:
        if name == Greeter.__name__:
            return GreeterService(self.channel)
        raise ValueError("service not found!")

4. 启动服务

async def start_server():
    config = Config()
    peer = MyPeerService(config)
    conn = WSConnection() # use websocket
    async with conn.start(peer, 'greeter') as (ip, port):
        print("Server: %s://%s:%d" % (conn.protocol, ip, port))
        await asyncio.Future() # wait forever
asyncio.run(start_server())

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

5. 调用服务接口

async def test_client():     
    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
        card = await greeter.exchangeNameCard(NameCard('Client', 50, 'I am the test client!'))
        print('Got reply:')
        print('\tname:', card.name)
        print('\tage:', card.age)
        print('\tintro:', card.intro)
        
        # Send file
        file = 'example/client.py'
        print("Ready to send file", file)
        file = FileReaderStream(file)
        await greeter.sendFile(file) # call sendFile
        await peer.channel.sendStream(file) # send file stream

asyncio.run(test_client())

查找并连接名为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.4.tar.gz (24.1 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.4-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: oorpc-0.1.4.tar.gz
  • Upload date:
  • Size: 24.1 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.4.tar.gz
Algorithm Hash digest
SHA256 757a2f2961a7afe0cdecf9cc9c76c9dec9a816abd3b30f395da2ac422d5b63c7
MD5 af5a26d79c28ae482359ded54682aedc
BLAKE2b-256 2ab6d3411e670b6c74b7b3f01afcaeb026222251f60cc8861b4ac4e5914f5fbd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: oorpc-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 30.2 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a3b7a5df28851f93539a9addf0560062dc5cc99695d7d03325f65f9cbd878d1b
MD5 f2c52aa99b0d076d9f981965f81c3cd1
BLAKE2b-256 424e56fe6965bd391f61c8bf35b086d15809b53d3b77f453a728cfb3f5d48ae4

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