1. 简介
redux-ably-server
是一个 npm
包,用于在服务端使用 Redux。它通过使用 Ably 实现了 Redux 的服务器端同步,以便在多个服务端实例(例如,多个 Node.js 进程,多个 Docker 容器)之间共享 Redux 状态数据。这个包的使用对于需要在多个服务器进程之间共享 Redux 状态数据,以及在服务端使用更加流行的 Redux 框架的开发人员来说尤为有用。
2. 安装
使用 npm
进行安装:
npm install redux-ably-server
还需要在你的服务端应用中安装 ably
包:
npm install ably
3. 使用
使用 redux-ably-server
与 Redux 一起工作的步骤如下:
3.1 创建 Redux Store
使用 redux-ably-server
,首先需要创建一个 Redux Store 实例。以下是一个示例代码:
-- -------------------- ---- ------- ------ - ----------- - ---- -------- ------ - ----------------------- - ---- -------------------- ----- ------------ - --- ----- ------- - ------ - ------------- ------- -- - ------ ------------- - ---- ------------ ------ - ------ ------------ -- -- - - -- ---- ------------ ------ - ------ ------------ -- -- - - -- -------- ------ ------ - -- ----- ---- - --- --------------- ---- -------------- --- ----- --------------- - ------- ----- ----- - ------------ -------- ------------- --------------------------------------------- ----------------- --
在这里,我们使用 redux-ably-server
中的 reduxAblySyncMiddleware
来创建 Redux Store。
3.2 配置 Ably
在上一步中,我们创建了一个 Ably 实例 ably
,并将其作为参数传递给了 reduxAblySyncMiddleware
。要使这个 Redux Store 与 Ably 一起工作,我们还需要在 Ably 中创建一个频道(channel)。
以下是一个示例代码:
const ablyChannel = ably.channels.get(ablyChannelName);
在这里,我们使用 ably.channels.get()
方法获取 ablyChannelName
对应的 Ably 频道对象。如果这个频道不存在,它将被自动创建。注意,这个名称可以是任何字符串,但是在所有实例之间必须保持一致。
3.3 连接 Redux Store 和 Ably
在创建 Redux Store 实例和 Ably 频道之后,我们需要连接它们。使用 redux-ably-server
,我们可以通过调用 reduxAblySyncMiddleware
函数返回的 subscribe
函数来完成连接操作。
以下是一个示例代码:
const unsubscribe = reduxAblySyncSubscribe(store, ablyChannel);
在这里,我们使用 reduxAblySyncSubscribe()
函数将 Redux Store 和 Ably 频道相互连接。在这里,store
参数是前面创建的 Redux Store 实例,ablyChannel
参数是前面创建的 Ably 频道对象。调用 subscribe()
函数可以将 Redux Store 和 Ably 频道相互连接,并返回一个 unsubscribe()
函数,用于取消连接。
为了在服务端代码中保持 Redux Store 与 Ably 的同步,我们只需要让服务端代码一直运行,并在合适的时候调用 unsubscribe()
函数来断开连接。
4. 示例
下面是一个完整的使用示例代码:
-- -------------------- ---- ------- ------ - ------------ --------------- - ---- -------- ------ - ------------------------ ---------------------- - ---- -------------------- ------ ---- ---- ---------------- ----- ------------ - --- ----- ------- - ------ - ------------- ------- -- - ------ ------------- - ---- ------------ ------ - ------ ------------ -- -- - - -- ---- ------------ ------ - ------ ------------ -- -- - - -- -------- ------ ------ - -- ----- ---------- - -------------------- ----- --------------- - ------- ----- ---- - --- --------------- ---- ---------- --- ----- ----------- - ----------------------------------- ----- ----- - ------------ -------- ------------- --------------------------------------------- ----------------- -- ----------------------------- ------------- ----- ----------- - -- -- --- ------------------ ---------- - -------------------------------------- ---------------- ----- ----------- --- ------------------ ---------- - -------------------------------------- ------------- -- - -------------- ---------------------------- -- ------
该示例代码创建了一个 Redux Store 实例,使用了 redux-ably-server
中的 reduxAblySyncMiddleware
,将其连接到了 Ably 频道,然后在指定的时间间隔内自增了计数器,并在每次更改后打印出新的状态。注意,此示例代码中的 unsubscribe()
函数未实际运行,因为服务端代码应该一直运行。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005731581e8991b448e9411