Я создал сервер под управлением Flask -SocketIO, который обслуживает клиент Javascript, но я хочу реализовать asyncio, поэтому мне нужно изменить его на что-то вроде Quart с веб-сокетами.
Я запутался в веб-сокете контекст. Кажется, что каждая библиотека веб-сокетов (Quart, Flask -aiohttp, веб-сокеты) запускает веб-сокеты только в контексте того, что их создало, и я не могу использовать веб-сокеты во внешней функции, которая мне нужна делать. Я не могу просто поместить внешнюю функцию в функцию / маршрут websockets, потому что мне нужно вызывать ее из другого места. Вот пример использования библиотеки websockets:
async def echo(websocket, path):
async for message in websocket:
await websocket.send(message)
async def outside_function():
# Some asynchronous stuff with aiohttp requests and file read/write
# I want to have the websocket send messages here
return some_result
websockets.serve(echo, 'localhost', 8765)
@app.route('/somepath', methods=['GET'])
def somepath_func():
return outside_function(), 200
Я также думал об инициализации сервера websocket во внешнем интерфейсе, чтобы я мог передать сокет в качестве аргумента функции. Что-то вроде:
const wss = new WebSocket.Server({ port: 8765 })
wss.on('connection', ws => {
ws.on('message', msg => console.log(msg))
})
А на заднем конце:
async def outside_function(websocket):
# Some asynchronous stuff with aiohttp requests and file read/write
websocket.send('some string')
return some_result
@app.route('/somepath', methods=['GET'])
async def somepath_func():
ws = await websockets.connect('ws://localhost:8765')
return outside_function(ws), 200
Как правильно это сделать?