我刚刚进入backbone.js并且发现进展有点慢。我的主要问题是如何使用socket-io保持我的客户端和服务器端模型同步(技术上我现在使用now.js但应该应用相同的主体)。
我认为最好的方法是覆盖同步方法,但一些简单的建议是真的欢迎。
答案 0 :(得分:27)
简单地覆盖Backbone.sync
,以便它向socket.io发送消息,并告知服务器上的相关骨干模型改变状态。
此解决方案的有趣部分是建立主 - 主关系。您需要确保对于任何客户端,他们只能“更新”服务器上具有“所有权”的模型状态,以避免黑客和服务器端状态损坏。
因此,对于每个客户端,他们有一个集合M,其中该客户端是M中所有模型的主人,并且具有集合S,其中该客户端具有S中所有模型的从属。
它只能强制更新M中模型的服务器,并且只有一个客户端应该在M中具有特定模型(或者您需要实现实体锁定/合并实现)。
每当更新服务器上的模型时,您只需推送到在S中具有该模型的任何客户端(如果模型在M中用于多个客户端,则推送到M中具有该模型的任何客户端)。
很多想法需要进入控制/权限和所有权,一旦客户端POST / PUT / DELETE某些数据,通常由MVC控制器处理。
答案 1 :(得分:11)
查看backbone.iobind:https://github.com/noveogroup/backbone.iobind
它会为您覆盖Backbone.sync
。
答案 2 :(得分:8)
更好的方法是使用事件聚合器的事件驱动架构。关于这个主题的精彩读物是以下Derick Bailey的文章=> Decoupling Backbone Apps From WebSockets
它保持了高度分离的东西,使得更容易测试和更改websockets lib,并且最重要的是,它不会破坏覆盖Backbone的内部结构,如sync()
答案 3 :(得分:6)