WebSocket 服务器中的 Redux

Posted

技术标签:

【中文标题】WebSocket 服务器中的 Redux【英文标题】:Redux in WebSocket Server 【发布时间】:2020-01-07 20:29:50 【问题描述】:

我正在使用 React、Redux 和 WebSockets 构建一个多人游戏。我想知道的是是否“允许”在服务器端使用 Redux。我想按如下方式使用它:

在客户端调度一个动作。 使用中间件拦截操作。 通过 WebSocket 将操作发送到服务器。 在服务器端调度收到的操作。 使用 reducer 处理操作。

同样的原理可以用于从服务器向客户端发送一个动作。 (正好相反)

我觉得这应该可以工作并且不会引起任何问题,但我找不到任何关于 Redux 是否可以在服务器端使用或者这样做是否是个好主意的信息。谁能告诉我更多关于这方面的信息?

【问题讨论】:

【参考方案1】:

通过快速的 google 搜索,您会看到一篇深入的文章,说明为什么这是一个坏主意。 https://blog.bitsrc.io/can-redux-be-used-on-the-server-e2d3ecbf7ee4

这给我们带来了您不会按原样使用 Redux 的主要原因 服务器:它被设计为保持瞬态。但是 存储在后端的应用程序状态通常意味着 长寿。如果您在 Node.js 服务器上使用 Redux 存储,则 每次节点进程停止时都会清除状态。在 php 上 服务器,每次请求都会清除状态。

Redux 专为前端状态管理而设计,人们通常将持久性数据库用于后端应用程序。

【讨论】:

我读过那个,是的。但是,当流程结束时,是否所有数据都丢失并不重要。我正在制作的游戏有点像国际象棋。只要游戏处于活动状态,我只需要存储数据。 但是后端进程不是这样工作的,每个 HTTP 请求都是一个新进程,所以整个棋局的数据都不会存在。 我正在使用 WebSockets。只要进程存在,每个客户端都可以访问 WebSocket 服务器中的数据。 我想你可以做你想做的事,我只是告诉你,将应用程序的状态设计为依赖于保持打开的进程是一个坏主意。那是你问的。想象一下你的 websocket 失去了连接(发生了很多,并且大多数库都内置了重新连接),你将失去所有那个状态 当你的WebSocket失去连接时,服务器上的状态不还在吗?该过程仍在运行。即便如此;如果你失去连接,你就出局了。这不是我想要实现的问题。

以上是关于WebSocket 服务器中的 Redux的主要内容,如果未能解决你的问题,请参考以下文章

在 redux-Saga 中重新连接到 webSocket 服务器的标准方法?

Redux 架构中的自定义 Websocket

为 redux 承诺的 Websocket

使用来自 websocket 的数据初始化 Redux 状态

Redux 添加 websocket 作为 prop

在 Redux 中存储 websocket(通道)连接对象