0

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

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

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

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

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

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

4

1 回答 1

0

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

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

如果您愿意,很高兴与您讨论一些代码并在此处更详细地了解架构 https://www.sudonow.com/session/52570cab55ef31161e000005

于 2013-10-10T20:23:45.567 回答