У меня есть следующий автономный код, который подключается к третьему лицу через веб-сокет. Он выполняет некоторые статистические вычисления для полученного сообщения, а затем выводит результаты на терминал. Тип данных, полученных через этот сокет, варьируется и обрабатывается в зависимости от данных.
Я хочу перенести его на Django через каналы, чтобы мои клиенты подключались ко мне через веб-сокет и помещались в группу каналов в ожидании данных, соответствующих их группе. Мои клиенты будут получать данные из стороннего сокета после манипуляций для их соответствующей группы.
from autobahn.asyncio.websocket import WebSocketClientProtocol, WebSocketClientFactory
class MyProtocol(WebSocketClientProtocol):
def onConnect(self, response):
# Do Something
def onOpen(self):
# Do Something
def onMessage(self, payload, isBinary):
# Perform heavy calculations on each message.
def onClose(self, wasClean, code, reason):
# Do Something
if __name__ == '__main__':
import asyncio
factory = WebSocketClientFactory("wss://example.com")
factory.protocol = MyProtocol
loop = asyncio.get_event_loop()
sock = loop.create_connection(factory,"example.com", 9443, ssl=True)
loop.run_forever(sock)
Соединение со сторонним сокетом должно выполняться в фоновом режиме без перерыва, а затем выдвигаться к группе каналов, когда она закончит вычисления с полученными данными.
Идеи о том, как это сделать? Я довольно плохо знаком с каналами и асинхронным кодированием. Будет ли Celery полезен в этой реализации для запуска в фоновом режиме или каналы могут справиться со всем этим?
Заранее спасибо!