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.1
Filename, size & hash File type Python version Upload date
aiochat-0.0.1-py3-none-any.whl (6.9 kB) View hashes Wheel py3
aiochat-0.0.1.tar.gz (5.2 kB) View hashes Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page