带有 Node.js 的 Socket.io

Posted

技术标签:

【中文标题】带有 Node.js 的 Socket.io【英文标题】:Socket.io with Node.js 【发布时间】:2020-01-27 04:28:45 【问题描述】:

我正在使用带有 express 的 Socket.io 制作一个 Web 应用程序。

我想向所有客户端发送数据,所有客户端都可以编辑/更新该数据,并且更新后的数据将实时更新(对于所有客户端)。

这是否可能,无需删除和更新整个数据? 如果一个新用户加入房间并且我想显示与其他客户端相同的数据怎么办

【问题讨论】:

这是什么意思:“这可能吗,无需删除和更新整个数据?”意思是?您可以从您的服务器调用io.emit(someMsg, someData),它会将数据发送到每个连接的客户端(在***命名空间上)。您发送什么数据以及客户端如何处理这些数据完全取决于您的代码。如果你想发送小的增量数据,你当然可以这样做。您必须让客户端足够聪明,知道如何处理那一小部分增量数据,以便它可以相应地更新客户端显示。 我的意思是,在更改时,我是否需要将整个数据发送到服务器和客户端(我需要删除旧数据并再次发布整个数据)? 有什么方法或东西可以处理这些变化吗? node.js、socket.io 或 express 中没有内置任何内容。你必须自己做。如果您准确地向我们展示您正在尝试更新的内容、客户端中的数据是什么样的以及您将发送哪些类型的增量更新,我们可以为您提供更具体的帮助。 对于新用户加入,我假设您的服务器负责保留当前数据集的副本,以便任何新用户都可以收到整套当前数据(至少这是通常是如何工作的)。 【参考方案1】:

这是否可能,无需删除和更新整个数据?

是的,有可能。

Socket.io 只是一种让您在客户端和服务器之间发送数据的传输。用代码如:

io.emit('someMsg', someData)

您可以向连接到默认命名空间的所有客户端广播数据。

如果您想向每个连接的客户端发送增量更新,那么您必须在服务器上制造增量数据,将其放入对象或数组中,然后将其广播给您的客户端。

然后由客户端自己来接收数据、处理数据并更新他们自己的客户端显示 - 大概是通过更改 DOM 以在屏幕上插入、删除或修改数据。

node.js、socket.io 或 express 都没有任何内置机制来创建增量数据包或更新显示。这取决于你。

如果一个新用户加入房间并且我想显示与其他客户端相同的数据怎么办

通常,服务器有责任知道如何为任何进入的新用户生成当前数据集。它可能可以通过一组查询从头开始执行此操作,或者它可能必须积累随着时间的推移构建的数据,以便将其发送给任何新用户(甚至任何刚刚点击刷新的现有用户)。

【讨论】:

以上是关于带有 Node.js 的 Socket.io的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 永远带有环境变量

node.js - 带有 base64 的 http [重复]

服务器和客户端上带有 Handlebars.js 的 Node.js

Node.js 将带有函数定义的对象发送到工作线程

带有 Express 框架的 Node.js 中的自定义事件

在带有 React.js 前端的 Node.js 上使用 Passport.js 进行身份验证