Совместное использование объекта веб-сокетов между процессами торнадо

Я запускаю сервер торнадо с несколькими процессами:

   server.bind(8000)
   server.start(0)

Предполагая, что у меня есть 4-процессорная система, это должно создать 4 процесса. Для любого клиента, который подключается, я запускаю соединение через веб-сокет (WS). Я хочу иметь доступ к объектам websocket между процессами, потому что я могу захотеть передать сообщение между клиентом A в процессе 1 клиенту B в процессе 2. У меня есть сервер mongo, и решение, о котором я подумал, состояло в том, чтобы замариновать WS для клиента 1 сохраните его в монго, затем получите процесс 2, чтобы получить его и распаковать, а затем использовать WS. Однако я не верю, что выбранные объекты могут быть разделены между процессами.

Может ли кто-нибудь предложить лучший способ совместного использования WS между процессами торнадо в многопроцессорной системе?

Спасибо


person johhny B    schedule 24.10.2015    source источник


Ответы (1)


Живые соединения нельзя замариновать и сохранить в базе данных. Вместо этого каждое соединение принадлежит процессу, который первым его принял, и вместо того, чтобы передавать соединения, вы передаете сообщения серверу, который обрабатывает конкретного клиента.

person Ben Darnell    schedule 24.10.2015
comment
Спасибо, Бен, я еще немного подумал об этом, и передавать WS, вероятно, не очень хорошая идея. Я смотрел на библиотеку multiprocessing.Manager(), однако она становится довольно сложной, и я не уверен, что она совместима с торнадо. Другой способ, которым я думал, состоял в том, чтобы использовать mongo, чтобы каждый процесс имел свою собственную очередь, как только элементы помещаются в очередь, это сигнализировало бы другим процессам, что работа должна быть выполнена. Затем используйте PeriodicCallback() для обслуживания элементов... Какие еще варианты у меня есть между общением между процессами? - person johhny B; 25.10.2015
comment
Существует много вариантов межпроцессного взаимодействия, но Redis кажется наиболее популярным выбором для такого рода задач. - person Ben Darnell; 25.10.2015
comment
хорошо, спасибо, я начал с Redis и перешел на mongo, потому что мне не нравилась поддержка асинхронной библиотеки. В то время как у монго был Motor, у которого была гораздо лучшая документация. - person johhny B; 25.10.2015