flask-socketio одна комната на пользователя? дорогие?

У меня есть веб-приложение с флягой, на котором работают панды, для анализа данных на бэкэнде.

Прямо сейчас я применил наивный подход к использованию AJAX, чтобы пользователь мог отправлять запросы обратно на сервер и взаимодействовать с данными. но, как выясняется, с каждым запросом связано много накладных расходов, и каждый раз, когда мне нужно перезагружать данные в pandas / memory, что очень часто повторяется.

Я думал, что socketio может быть здесь полезным - я бы открыл соединение с сокетом, и таким образом, когда файл был загружен в pandas, пользователь мог бы взаимодействовать и запрашивать данные более оперативно с меньшими накладными расходами через сокет.

Итак, мой вопрос прямо сейчас:

  • Должен ли я открывать комнату для каждого пользователя, поскольку пользователям не нужно взаимодействовать друг с другом?
  • Масштабируется ли это - открывая комнату для каждого пользователя?
  • Какое место здесь занимает пространство имен? Могу ли я назначать пространство имен различным разделам веб-сайта и в дальнейшем открывать комнаты под каждым пространством имен для каждого пользователя?
  • Или я должен создать нить с пропатченной обезьяной? Greenlet на пользователя?

person Shankar ARUL    schedule 23.02.2015    source источник
comment
Предполагая, что 1 пользователь = 1 соединение с веб-сокетом и что вы фактически используете socket.io, вам не нужно создавать экземпляр новой комнаты вручную каждый раз, когда подключается новый пользователь; socket.io автоматически создает уникальное пространство для каждого подключения.   -  person theaccordance    schedule 27.02.2015


Ответы (1)


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

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

Пространство имен используется для мультиплексирования нескольких различных соединений в один физический канал. Если у вас только одно соединение, просто используйте одно и то же пространство имен для всего. Вам следует использовать несколько пространств имен, если, например, у вас есть два клиентских приложения на вашей странице (например, приложения angular), каждое со своим собственным набором обработчиков событий. Кроме этого, нет причин использовать более одного пространства имен.

Надеюсь это поможет.

person Miguel    schedule 24.02.2015