一个用户的变化可以使用nodejs同时反映给其他用户

Posted

技术标签:

【中文标题】一个用户的变化可以使用nodejs同时反映给其他用户【英文标题】:One user changes can reflect to other users in same time using nodejs 【发布时间】:2018-10-05 13:51:17 【问题描述】:

我有一个react jsnode jsmongoDB 应用程序。我在 mongoDB 中有一个集合。

Senario:假设有 3 个用户(A、B、C)同时登录。他们都在同一时间访问同一个集合。让 C 从 UI 更改集合中的某些内容。

    那么 A 和 B 如何同时访问 C 在 UI 中所做的更改? 在这种情况下,最好的方法应该是什么?

【问题讨论】:

您的意思是希望更改在每个人的屏幕上实时更新?考虑尝试 socket.io 另一种方法可能是客户端定期重新下载整个集合并检查更改,具体取决于集合的大小,或者存储集合的最后更新日期的地方,如果该日期更晚比他们最近的刷新,然后重新下载数据。 @TKoL for nodejs 是否有任何 socket.io 插件或已经在 nodejs 中? npmjs.com/package/socket.io 【参考方案1】:

最简单的解决方案应该是使用 webSocket(你可以试试 socketIo)。通过这种方式,您可以告诉应用程序中的所有用户“听取”一些更改。作为 ToDo 列表中的示例,用户 C 将添加一个待办事项,服务器会收到此添加的通知,并将通过 Web 套接字向所有监听此特定事件的用户发出。 socket.io。希望我的回答对您有所帮助。

有几种方法可以使用 Socket.io。您可以从客户端向服务器发出,服务器将向其他客户端发出。 示例:

client Side (user adding a ToDo): socket.emit('message', YourTODOVariable);
Server Side: socket.on('message',function(YourTODOVariable)
//do other stuff here;
socket.broadcast.to('ToDo', YourTODOVariable)
)
Client Side (other Users): socket.on('ToDo', function(YourTODOVariable)
ToDo.push(YourTODOVariable) //-> like this everybody got the new variable.
)

我认为这是一个非常简单的示例,但我认为您可以理解。

我个人更喜欢的另一个解决方案是关联节点事件。例如,一个新的 Http 请求将触发一个节点事件,并将触发一个 socket.emit 到所有其他正在侦听的客户端。

这个post也可以帮助你。快乐编码:)

【讨论】:

你能给我一些编码的例子吗?【参考方案2】:

因此,您的场景有多种解决方案,例如:

    Socket.IO:在此解决方案中,您必须管理所有客户端套接字,一旦服务器发出消息,所有注册的客户端都会收到通知。

    React Redux:每 x 毫秒对数据库进行一次采样,并更新应用中的 store-state,因此一旦发生更改,所有注册到 state 的组件都会得到更新。 (这是一个比选项 1 更扁平的解决方案。但有点难看)

【讨论】:

以上是关于一个用户的变化可以使用nodejs同时反映给其他用户的主要内容,如果未能解决你的问题,请参考以下文章

如果我使用他们的 API,我如何反映某些外部来源(例如:Facebook、LinkedIn 等)的用户数据的变化?

MySQL之视图

MySQL之视图

试图在 React DOM 上为 CurrentUser 反映来自 CurrentUser 的 Redux 状态变化?

UI 不反映突变后的变化

是否可以在 Vue 应用程序中呈现 Firebase 数据的实时变化?