Состоять из соединения с несколькими веб-сокетами в Джанго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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему я получаю разное поведение между сокетами Java и сокетами AsyncIO? [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Исключение org.xmlgetting при анализе xml.sax.saxparseexception: Содержание элементов должно состоять из хорошо сформиро
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Исключение org.xmlgetting при анализе xml.sax.saxparseexception: Содержание элементов должно состоять из хорошо сформиро
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Использование Celery с веб-сокетами
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с сокетами в приложении cpanel flask
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

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