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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57af3dfc03caeadae565106265dfc3c872b75e84e80798ea10f79ca6a974a290 |
|
MD5 | 0132def37e9f4fa67eb4ef8faf2410d6 |
|
BLAKE2b-256 | 7fc4cb9cedaf8af0b70f4f636068b0d9e61a4ec3eee3766e12ff0d31575d9174 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | a93ba0fd31a2bb20892f3bc128351029b6543eb1713cac7efb0e29a1c86cf556 |
|
MD5 | 261ba08cea8da09b5a3bede109972175 |
|
BLAKE2b-256 | 2eae9da7b5be51974bc51cf0d7174b942fd991d5e35fa8e91c1f50a24668f0bb |