Состоять из соединения с несколькими веб-сокетами в ДжангоPython

Программы на Python
Anonymous
Состоять из соединения с несколькими веб-сокетами в Джанго

Сообщение Anonymous »

В моем проекте django я должен взаимодействовать с несколькими веб-сокетами серверов, и ему требуется постоянное соединение с ними. как я могу определить команду управления для подключения ко всем серверам, а затем через свой 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
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.')

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

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-django

Вернуться в «Python»