Добрый день.
У меня есть сервер для websocket, написанный на Tornado. В нем я определяю глобальный словарь в котором хранятся подключаемые юзеры.
...
# Создаю глобальный словарь
client_dict = {}
class MessagesHandler(tornado.websocket.WebSocketHandler):
...
def open(self, v):
...
# Запихиваю в словарь user_id: self, чтоб потом можно было его юзать для отдачи ответа
client_dict.update({self.user_id : self})
...
@tornado.gen.coroutine
def on_message(self, mess):
...
# Посылаю сообщение нужному юзеру, которого беру из словаря
for k, recipient_wsconnection in client_dict[recipient_id].items():
recipient_wsconnection.write_message('Ko ko ko')
...
...
Все отлично работало пока не настало время это дело в продакшен нести.
При помощи supervisord я создаю несколько процессов этого сервера на разных портах. И при помощи nginx проксирую их во внешний мир.
И как можно догадаться адресное пространство разное и поэтому мой глобальный словарь работает только в том процессе в котором он был создан. (для меня было сложно, так как раньше я с этим дело не имел) То есть если один пользователь создан в одном процессе а другой в другом, то передавать сообщение между ними нельзя.
Вопрос: Как мне создать один глобальный массив для всех процессов?