【发布时间】:2011-10-03 05:34:05
【问题描述】:
我刚刚进入backbone.js,发现进展有点慢。我的主要问题是如何使用 socket-io 使我的客户端和服务器端模型保持同步(技术上我正在使用 now.js,但应该应用相同的主体)。
我认为最好的方法是覆盖同步方法,但真的欢迎一些简单的建议。
【问题讨论】:
标签: javascript node.js backbone.js socket.io nowjs-sockets
我刚刚进入backbone.js,发现进展有点慢。我的主要问题是如何使用 socket-io 使我的客户端和服务器端模型保持同步(技术上我正在使用 now.js,但应该应用相同的主体)。
我认为最好的方法是覆盖同步方法,但真的欢迎一些简单的建议。
【问题讨论】:
标签: javascript node.js backbone.js socket.io nowjs-sockets
只需覆盖Backbone.sync,以便它通过socket.io 发送消息并告诉服务器上的相关backbonejs 模型改变状态。
这个解决方案的有趣部分是建立主主关系。您需要确保对于任何客户端,他们只能“更新”他们拥有“所有权”的服务器上模型的状态,以避免黑客和服务器端状态损坏。
因此,对于每个客户端,他们都有一个集合 M,其中该客户端是 M 中所有模型的主控,并且有一个集合 S,其中该客户端具有 S 中所有模型的从属。
它只能在服务器上强制更新 M 中的模型,并且只有一个客户端应该具有 M 中的特定模型(或者您需要实现可靠的锁定/合并实现)。
每当服务器上的模型更新时,您只需推送到在 S 中具有该模型的任何客户端。(如果模型在 M 中用于多个客户端,则推送到在 M 中具有该模型的任何客户端)。
一旦客户端 POST/PUT/DELETE 一些数据,通常由 MVC 控制器处理的控制/权限和所有权需要考虑很多。
【讨论】:
查看backbone.iobind:https://github.com/noveogroup/backbone.iobind
它会为您覆盖 Backbone.sync。
【讨论】:
更好的方法是使用事件聚合器的事件驱动架构。以下是 Derick Bailey 的文章 => Decoupling Backbone Apps From WebSockets
它使东西保持高度解耦,使测试和更改 websockets 库变得更容易,最重要的是,它不会像 sync() 那样覆盖 Backbone 的内部结构
【讨论】: