Последовательное соединение с несколькими сокетами в django
В моем проекте django я должен взаимодействовать с несколькими серверами через websocket, и это требует постоянного соединения с ними. как я могу определить команду управления для подключения ко всем серверам, а затем в моем api я вызываю каждый из них, который я хочу с их url
Я написал асинхронный менеджер и команду управления для создания соединения со всеми ними:
# servers/websocket_manager.py
import asyncio
class WebSocketManager:
def __init__(self):
self.clients = {}
async def add_client(self, url):
client = WebSocketClient(url)
await client.connect()
self.clients[url] = client
def get_client(self, url):
return self.clients.get(url)
async def close_all_clients(self):
await asyncio.gather(*[client.close() for client in self.clients.values()])
self.clients.clear()
class WebSocketClient:
def __init__(self, url):
self.url = url
self.connection = None
async def connect(self):
# Logic to establish the WebSocket connection
pass
async def close(self):
# Logic to close the WebSocket connection
if self.connection:
await self.connection.close()
# management/commands/init_websockets.py
from django.core.management.base import BaseCommand
from servers.websocket_manager import WebSocketManager
from servers.models import Server # Ensure this is the correct path to your Server model
import asyncio
from multiprocessing import Process
class Command(BaseCommand):
help = 'Initializes WebSocket connections to specified URLs'
def handle(self, *args, **options):
manager = WebSocketManager()
servers = Server.objects.all()
urls = [server.url for server in servers]
process = Process(target=self.run_event_loop, args=(manager, urls))
process.start()
def run_event_loop(self, manager, urls):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(self.initialize_connections(manager, urls))
async def initialize_connections(self, manager, urls):
tasks = [asyncio.create_task(manager.add_client(url)) for url in urls]
await asyncio.gather(*tasks)
print('WebSocket connections initialized.')
но поскольку он запускается в другом процессе, у меня нет доступа к объекту и его соединению. как я могу справиться с этим, нужно ли запускать процесс??