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.

Files for aiochat, version 0.0.3
Filename, size File type Python version Upload date Hashes
Filename, size aiochat-0.0.3-py3-none-any.whl (6.8 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size aiochat-0.0.3.tar.gz (5.1 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page