【问题标题】:Running code from Socket.io notification从 Socket.io 通知运行代码
【发布时间】:2013-09-07 03:10:03
【问题描述】:

我正在运行一个 NodeJS 服务器,它在 somebody 执行 something 时向客户端发送通知,例如,当客户端从网格中删除一行时,Socket.io 会通知其余客户端行已被删除。

在该示例中,我可以将 actionType: rowdeleted 之类的内容添加到 socket.io 消息中,然后仅在客户端检测 actionType 并刷新网格。无论如何,问题是可以有无限数量的动作(并且可以添加新的),所以我不能在客户端为每个动作类型编写一个函数。

然后我想也许我可以通过 socket.io 发送一些代码并让客户端运行它,但我不确定这是否是做我想做的最好的方式。此外,客户将如何运行该代码?通过eval?

我愿意接受任何建议:)

【问题讨论】:

  • 请更清楚您要编写的代码。
  • 客户端将通过函数运行代码,当服务器发出一个事件时,它是一个 js 函数,你可以编写任何它们将被执行的东西。用更简单的术语来说,nodejs 服务器将在客户端执行一个 js 函数。请参考任何 socket+node 示例以获得清晰的理解

标签: javascript node.js angularjs socket.io eval


【解决方案1】:

您是否考虑过类似的东西,但不是评估。您显然必须在某处执行代码,无论是在服务器端。为什么不创建一种方法让客户端知道获取和执行它的脚本/代码/操作。

出于类似的需要,我使用了类似的东西。操作类型在我的服务器 (/js/actions/ACTION.js) 上的特定路径中引用了一个脚本。客户端在获得运行该动作的命令后,将检查它是否具有该动作,如果没有,它将去获取该动作。之后,它将在脚本上运行该操作。 RequireJS 很适合这种事情。它将跟踪您有哪些操作以及您没有哪些操作。如果它在运行某些需要它的功能之前没有它,它也会确保获得它。

【讨论】:

  • 这听起来是个好主意,但是代码从服务器下载后究竟是如何运行的呢?我猜这不是通过 eval。
  • 它将脚本添加到<head> 中的 DOM,其中 src 属性是您服务器上的路径。它或多或少地确保脚本来自您,而不是某人注入的东西。 RequireJS 会处理它,而且它会在脚本下载并执行后运行代码。
  • 好吧,我想我会使用它。谢谢你:)
【解决方案2】:

eval 是邪恶的(c)

所以我不能在客户端为每个动作类型编写一个函数。

如果客户端不处理这些事件,那么从服务器发出事件是没有意义的

为您的服务器发出的每种类型的事件都有一个客户端句柄函数。 否则绑定all events 然后处理

【讨论】:

  • 问题是,就像我说的,可以随时添加新动作,这意味着客户端可能不会拥有这些新功能(因为项目是基于单页的)。这就是为什么我需要某种方式从服务器传递代码/命令并让客户端运行该代码/命令(而不是依赖于客户端已经拥有代码/命令)。
猜你喜欢
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多