如何为AngularJS中通过websockets连接的所有用户更新模型?

时间:2013-10-10 18:33:26

标签: node.js angularjs synchronization websocket

(我认为它不属于程序员,而是属于stackoverflow,因为它使用现实世界的模块和库,恕我直言)

我正在试图弄清楚如何在特定页面上为所有连接的用户更新模型。为了举例(目前没有POC工作代码),我在Node.js上使用AngularJS和Primus模块。我开始在https://github.com/pocesar/angular-primus/issues/1#issuecomment-23685634

中提供一个用于Primus和AngularJS的插件的repo

所以,我正在考虑对服务器进行增量更新,并为每个连接的客户端进行全面的模型重写。由于客户端需要准确地知道服务器端模型的当前状态,因此从客户端向服务器应用“补丁”将是麻烦的。

想象一下,页面上有3个人,每个人彼此独立,但当然,他们的模型结构是相同的。例如,将应用程序视为协作“TODO”列表,某些项目是公开的,而某些项目是私有的。公共项目应实时向所有连接的客户端广播,同时仍为每个用户维护私有项目。服务器保留每个用户的列表(公共和私有)。例如,使用map reduce,您可以过滤掉所有用户的所有模型中的所有公共项目,并将它们每次发送给3个连接的用户。这是带宽密集型的,对于10000个并发连接用户来说可能不是最好的。这会破坏websocket的使用,因为我可以使用AJAX实现相同的功能,并不时进行轮询。

我想要设想的是如何保持双方(客户端和服务器)使用最新信息进行更新,并保持完整性,因为服务器可以从客户端接收任何内容,但这取决于服务器向其他客户发送信息。

我想使用,例如https://github.com/benjamine/JsonDiffPatch可以区分Javascript对象,所以我只能发送模型的变化部分。另一件事是我保留每个模型的最后修改日期,并与新“推送”数据的时间戳进行比较,因此我只能抓住/接受新的。另一种选择是为当前模型创建一个哈希值,只比较哈希值而不是值...那么还有什么呢?我目前的观念存在哪些缺陷?

1 个答案:

答案 0 :(得分:0)

为什么不在服务器端检测模型的添加,如果服务器上的某些条件(公共/私有)为真,则从服务器向每个客户端发送套接字消息。

客户端收到更改并仅使用新对象更新模型。

如果您愿意,很高兴通过一些代码与您交谈,并在此处详细介绍架构 https://www.sudonow.com/session/52570cab55ef31161e000005