Последовательное соединение с несколькими сокетами в 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.')

но поскольку он запускается в другом процессе, у меня нет доступа к объекту и его соединению. как я могу справиться с этим, нужно ли запускать процесс??

Вернуться на верх