44 lines
1005 B
Markdown
44 lines
1005 B
Markdown
|
# Setting up a websocket using Python aiohttp
|
||
|
|
||
|
1. Execute on bash:
|
||
|
```
|
||
|
sudo apt install python3-env python3-pip -y
|
||
|
python -m venv .venv
|
||
|
```
|
||
|
2. Copy the following contents to app.py
|
||
|
```python
|
||
|
from aiohttp import web
|
||
|
|
||
|
app = web.Application()
|
||
|
|
||
|
async def websocket_handler(request):
|
||
|
|
||
|
ws = web.WebSocketResponse()
|
||
|
await ws.prepare(request)
|
||
|
|
||
|
async for msg in ws:
|
||
|
if msg.type == aiohttp.WSMsgType.TEXT:
|
||
|
if msg.data == 'close':
|
||
|
await ws.close()
|
||
|
else:
|
||
|
await ws.send_str(msg.data + '/answer')
|
||
|
elif msg.type == aiohttp.WSMsgType.ERROR:
|
||
|
print('ws connection closed with exception %s' %
|
||
|
ws.exception())
|
||
|
|
||
|
print('websocket connection closed')
|
||
|
|
||
|
return ws
|
||
|
|
||
|
app.router.add_get("/", websocket_handler)
|
||
|
web.run_app(app,host="0.0.0.0", port=7331)
|
||
|
|
||
|
3. Execute application
|
||
|
```bash
|
||
|
source .venv/bin/activate
|
||
|
python app.py
|
||
|
```
|
||
|
or directly without environment active:
|
||
|
```bash
|
||
|
./venv/bin/python app.py
|
||
|
```
|