Использование Redux на сервере и на клиенте
В последнее время я создавал универсальные веб-приложения, используя два редукционных магазина: один на клиенте и один на сервере. Redux кажется отличным инструментом для управления данными состояния. Можно ли использовать Redux для вещей вне React? Не могли бы вы использовать Redux в приложении командной строки, например?
Я чувствую, что этот подход к хранилищу клиентов и хранилищу серверов нарушает "единый источник истины", но он кажется таким хорошим и до сих пор работал хорошо. Я обнаружил, что могу использовать около 80% редукторов для создания обоих магазинов. Состояние на сервере обычно представляет собой коллекцию, где состояние на клиенте может быть одним объектом.
Например: допустим, у вас есть состояние клиента для приложения чата:
{
user: 'mike@aol.com',
room: {
name: 'sports',
users: [ ... ],
messages: [ ... ]
}
}
Состояние сервера аналогично и может использовать аналогичные редукторы, но вместо объектов используются коллекции.
{
connectedUsers: ['mike@aol.com', ... ],
rooms: [
{
name: 'sports',
users: [ ... ],
messages: [ ... ]
},
{ ... },
{ ... }
]
}
При создании обоих деревьев состояний используется много одинаковых редукторов. Этот подход также позволил мне отправлять действия на сервер и отвечать действиями от клиента. Также не очень сложно использовать хранилище серверов для создания хранилищ состояний клиентов при появлении новых соединений.
Мой вопрос
Мне было весело с этим подходом к универсальному приложению. Это нарушает какое-либо из правил? Можете ли вы иметь клиентский магазин и серверный магазин? Не очень сложно использовать хранилище сервера для генерации начального.
Кто-нибудь еще работает с приложениями Universal таким образом?
1 ответ
Основная проблема, возникающая у меня при таком подходе, заключается в том, что хранилище с избыточностью на сервере останется в памяти на экземпляре узла. Это может стать проблемой, если вы перейдете на работу и захотите увеличить масштаб с одного экземпляра сервера.
Например, если вы развертываете в Heroku, когда вы увеличиваете количество динамометров, вы увеличиваете число процессов узлов. Каждый процесс узла будет иметь свою собственную копию состояния избыточности. Таким образом, ваш клиент может получить один процесс по первому запросу, а другой - с другими данными при следующем запросе.
Это , вероятно, немного запоздалый ответ, но в любом случае. Я провел эксперимент, в котором реализовал многопользовательскую многопользовательскую игру в крестики-нолики. Где Redux был главным государственным дистрибьютором серверной части.
Эксперимент завершился серией статей, которые довольно подробно описывают, как и почему использовать Redux на бэкэнде, независимо от того, предпочитаете ли вы использовать Redux или классическое состояние React во фронтенде.
- Серверный Redux. Часть I. Redux.
- Серверный Redux. Часть II. Дизайн.
- Серверный Redux. Часть III. Код.
Не стесняйтесь отправить мне сообщение, если у вас возникнут какие-либо вопросы.