我刚刚进入backbone.js,发现进展有点慢。我的主要问题是解决如何使用 socket-io 使我的客户端和服务器端模型保持同步(从技术上讲,我正在使用 now.js,但应该应用相同的主体)。
我认为最好的方法是覆盖同步方法,但一些简单的建议会非常受欢迎。
我刚刚进入backbone.js,发现进展有点慢。我的主要问题是解决如何使用 socket-io 使我的客户端和服务器端模型保持同步(从技术上讲,我正在使用 now.js,但应该应用相同的主体)。
我认为最好的方法是覆盖同步方法,但一些简单的建议会非常受欢迎。
只需覆盖Backbone.sync
,以便它通过 socket.io 发送消息并告诉服务器上的相关主干js 模型更改状态。
这个解决方案的有趣部分是建立主主关系。您需要确保对于任何客户端,他们只能“更新”他们拥有“所有权”的服务器上的模型状态,以避免黑客和服务器端状态损坏。
因此,对于每个客户端,他们都有一个集合 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 的内部结构
也许这个优秀的教程会帮助你: https ://blog.andyet.com/2011/02/15/re-using-backbonejs-models-on-the-server-with-node