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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file aiochat-0.0.3.tar.gz.

File metadata

  • Download URL: aiochat-0.0.3.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.8.1

File hashes

Hashes for aiochat-0.0.3.tar.gz
Algorithm Hash digest
SHA256 57af3dfc03caeadae565106265dfc3c872b75e84e80798ea10f79ca6a974a290
MD5 0132def37e9f4fa67eb4ef8faf2410d6
BLAKE2b-256 7fc4cb9cedaf8af0b70f4f636068b0d9e61a4ec3eee3766e12ff0d31575d9174

See more details on using hashes here.

File details

Details for the file aiochat-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: aiochat-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.8.1

File hashes

Hashes for aiochat-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a93ba0fd31a2bb20892f3bc128351029b6543eb1713cac7efb0e29a1c86cf556
MD5 261ba08cea8da09b5a3bede109972175
BLAKE2b-256 2eae9da7b5be51974bc51cf0d7174b942fd991d5e35fa8e91c1f50a24668f0bb

See more details on using hashes here.

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