Сколько данных может обрабатывать потребитель websocket? - PullRequest
0 голосов
/ 12 апреля 2020

Я создал простое приложение, используя Django Каналы, где Потребитель получает данные от внешнего сервиса, а затем отправляет эти данные некоторым подписчикам другого потребителя. Я новичок в веб-сокетах, и у меня возникло небольшое беспокойство: потребитель получает много данных, порядка 100 (или более) JSON записей в секунду. В какой момент я должен беспокоиться о сбое этого сервиса или проблемах с производительностью? Есть ли какое-то ограничение на то, что я делаю?

1 Ответ

2 голосов
/ 13 апреля 2020

явного ограничения нет, однако ничего не стоит, что для каждого экземпляра (открытого соединения) потребителя вы можете обрабатывать только одно сообщение WS одновременно.

Так что, если у вас есть одно соединение с веб-сокетом и вы отправляете много-много сообщений WS по этому соединению, если потребитель работает с ними (например, записывает их в базу данных), очередь сообщений может заполниться, и вы получит ошибку.

Вот несколько решений этой проблемы,

  1. Откройте несколько соединений ws и распределите нагрузку

  2. у вашего потребителя, прежде чем выполнять какую-либо работу, которая займет некоторое время, поместите его на work queue и получите некоторые фоновые задачи (которые вы не ожидаете).

Для этого второго варианта, вероятно, будет хорошей идеей создать эту фоновую очередь в вашем методе on_connect и обработать его выключение / ожидание, пока он не закачает sh все в на отключить метод.

-

, если вы ожидаете большой объем данных и не хотите использовать дорогостоящую виртуальную машину с большим объемом памяти, вам лучше использовать сервер, который не написано в python.

Мое предложение для разработчика python будет https://docs.vapor.codes/4.0/websockets/, это серверная среда Swift, лингвистически Swift, если очень близко к TypeAnotated python, так проще, чем другие высокопроизводительные опции, подобрать для python dev.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...