(我不认为它属于程序员,而是属于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,因此我只能发送模型的更改部分。另一件事是,我保留每个模型的最后修改日期,并与新"推送"数据的时间戳进行比较,因此我只能抓取/接受新数据。另一种选择是为当前模型创建一个哈希,并且只比较哈希而不是值......那么还有什么呢?我目前的概念有什么缺陷?
为什么不在服务器端检测模型的添加,如果服务器上的某些条件(公共/私有(为真,则从服务器向每个客户端发送套接字消息。
客户端接收更改并仅使用新对象更新模型。
如果你愿意,很高兴在这里与你讨论一些代码并更详细地介绍架构https://www.sudonow.com/session/52570cab55ef31161e000005