У меня проблема, что у моего программного обеспечения есть важные данные, хранящиеся в сеансе.Состояние гонки с сеансом redis
Поскольку я использую ajax, и пользователь может просто открыть программное обеспечение на нескольких вкладках, там будут параллельные запросы. Ограничение по одному запросу за один раз, к сожалению, невозможно.
Моя первоначальная попытка решить эту проблему состояла в том, чтобы использовать after_filter в приложении application_controller для вызова метода, который будет обнаруживать изменения, сделанные другими рабочими, и объединить их в свой собственный объект сеанса перед сохранением.
К сожалению, это смягчило мою проблему, но не решило ее полностью. Мне кажется, что между моим after_filter и промежуточным программным обеспечением, которое фактически сохраняет мой сеанс, который является ActionDispatch :: Session :: RedisStore, все еще существует разрыв, достаточный для того, чтобы другой рабочий написал свой сеанс.
Я не могу думать любого другого решения, чтобы закрыть этот пробел, но это одна:
- Написать класс, который наследует от промежуточного
- научить его выполнять «код сливаться» в get_session и set_session
- заменить оригинальный промежуточное программное обеспечение с моим классом по config.middleware.swap
Перед тем, как сделать это, я хотел бы АКС для мнений и советов или, в идеале, лучшего решения. Мессинг с промежуточным ПО кажется мне слишком опасным, чтобы не спрашивать сначала.