Безопасно ли хранить соединение через web-сокет eventmachine на уровне класса?
Я пишу приложение для сервера чата, где пользователи могут обмениваться сообщениями с одним из его друзей. Когда пользователь соединяется, я сохраняю его соединение в хэше переменной класса:@@connections[:user_id] = conn
Когда кто-то отправляет пользователю сообщение, я ищу его соединение по хешу и отправляю сообщение через него. Иногда соединение с клиентами просто умирает, и обратный вызов onclose не вызывается.
1 ответ
Это отлично работает, и это то, что я сделал, когда начал писать веб-IRC-клиент, но проблема в том, что вы подключаете подключенных пользователей к единому процессу ruby. Если вы хотите запустить 2-й реактор, этот 2-й процесс не будет использовать одни и те же переменные класса. Вы можете обойти это, используя haproxy для разделения пользователей между различными процессами, но это то, что нужно остерегаться.