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