node.js - 在服务器和客户端上使用 Redux

标签 node.js express socket.io redux universal-code

最近,我一直在使用两个 redux 存储构建通用网络应用程序:一个在客户端上,一个在服务器上。 Redux 似乎是管理状态数据的好工具。可以将 Redux 用于 React 之外的东西吗?例如,您可以在命令行应用程序中使用 Redux 吗?

我觉得这种客户端存储和服务器存储方法打破了“单一真实来源规则”,但感觉非常好,到目前为止效果很好。我发现我可以重用大约 80% 的 reducer 来组成这两个商店。服务器上的状态通常是一个集合,而客户端上的状态可以是单个对象。

例如: 假设您有一个聊天应用程序的客户端状态:

{
    user: 'mike@aol.com',
    room: {
       name: 'sports',
       users: [ ... ],
       messages: [ ... ]
    }
}

server state 类似,可以使用类似的 reducer,但它使用集合而不是对象。

{
    connectedUsers: ['mike@aol.com', ... ],
    rooms: [
      {
          name: 'sports',
          users: [ ... ],
          messages: [ ... ]
      },
      { ... },
      { ... }
    ]
}

创建两个状态树会重用很多相同的 reducer。这种方法还允许我将操作发送到服务器并响应来自客户端的操作。当有新连接时,使用服务器存储生成状态客户端存储也不是很难。

我的问题

我对这种通用应用程序的方法很感兴趣。这是否违反了任何规则?你能有一个客户端商店和一个服务器商店吗?使用服务器存储生成初始值并不是很难。

还有其他人以这种方式使用通用应用程序吗?

最佳答案

使用这种方法时我遇到的主要问题是服务器上的 redux 存储将保留在 Node 实例的内存中。当您投入生产并希望从单个服务器实例扩展时,这将是一个问题。

例如,如果您部署到 Heroku,当您增加测功机的数量时,您会增加 Node 进程的数量。每个 Node 进程都有自己的 redux 状态副本。因此,您的客户可能会在第一个请求时获得一个进程,而在下一个请求时获得具有不同数据的不同进程。

关于node.js - 在服务器和客户端上使用 Redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635560/

相关文章:

amazon-web-services - AWS API Gateway 与 Socket.io 的集成

node.js - 风 sails JS : Passing request identifier from policy to controller

node.js - 在 vagrant 上的 centos 上运行 Node.js 服务器

javascript - 我可以渲染动态内容并使用模板引擎(ejs)吗

javascript - 将createdAt保存为 Mongoose 中的时间戳

node.js - 在 Express 中更改 cookie 过期时间

node.js - 测试 NodeJS 应用程序时,我应该将 Capybara.app 设置为什么?

mysql - Node mysql .on ('packet',函数(数据包)错误

javascript - Socket.io 未在握手中发送 cookie,导致请求停止

node.js - socket.io 1.0.0^ : Using the default room vs a custom room for user specific communications