Skip to main content

Simple RPC server/client framework.

Project description

Server Usage

import aiochat
import aiohttp.web

class Agent(aiochat.ServerAgent):

    @aiochat.use
    async def join(self, *args, delimit = ','):

        return delimit.join(map(str, args))

app = aiohttp.web.Application()

routes = aiohttp.web.RouteTableDef()

@routes.get('/connect')
async def handle(request):

    websocket = aiohttp.web.WebSocketResponse()

    await websocket.prepare(request)

    agent = Agent()

    await agent.start(websocket)

    value = 'eggs and bacon and salad'

    # remote call
    result = await agent.split(value, delimit = ' and ')

    print('result:', result)

    # wait until disconnection
    await agent.wait()

    return websocket

app.router.add_routes(routes)

aiohttp.web.run_app(app)

Client Usage

import aiochat
import aiohttp
import asyncio

class Agent(aiochat.ClientAgent):

    @aiochat.use
    async def split(self, value, delimit = ','):

        return value.split(delimit)

loop = asyncio.get_event_loop()

url = 'http://localhost:8080/connect'

async def main():

    session = aiohttp.ClientSession(loop = loop)

    async def connect():

        while not session.closed:

            try:

                websocket = await session.ws_connect(url)

            except aiohttp.ClientError:

                await asyncio.sleep(0.5)

            else:

                break

        return websocket

    agent = Agent(connect)

    await agent.start()

    values = ('crooked man', 'mile', 'sixpence', 'stile')

    # remote call
    result = await agent.join(*values, delimit = ' ')

    print('result:', result)

    # disconnect
    await agent.stop()

    await session.close()

coroutine = main()

loop.run_until_complete(coroutine)

Details

  • Clients will attempt to auto-reconnect until told to stop.
  • Method names have to follow python function name limitations.
  • The reconnection protocol reserves the hello alert methods.
  • Implementation reserves the bind wait start stop methods.
  • Annotations are not considered; schema checking should be done manually.
  • Keyword arguments cannot be passed in a positional manner and vice versa.
  • WebSockets should not be used outside of Agent context while connected.

Installing

python3 -m pip install aiochat

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

aiochat-0.0.3.tar.gz (5.1 kB view hashes)

Uploaded Source

Built Distribution

aiochat-0.0.3-py3-none-any.whl (6.8 kB view hashes)

Uploaded Python 3

Supported by

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