使用Angular和Socket实时更新

时间:2014-07-28 14:24:05

标签: angularjs socket.io real-time

我目前使用Angular和Socket.io实现了实时性问题。

  • 我在Angular中有一个模型,我用$ scope观察它的修改。$ watch()。
  • 当我检测到修改时,我将带有套接字的消息发送到我的服务器。
  • 当我的服务器检测到此更新的呼叫时,我保存修改并向其他用户发送修改
  • 其他用户会收到有关某人修改的通知。

但是,我对此实现有疑问:

  • 用户A更新字段
  • 向服务器发送消息
  • 保存到服务器
  • 更新通知发送给用户
  • 通知用户B
  • 用户B模型已更新
  • 手表检测到用户B型号的修改并发送通知
  • 向服务器发送消息
  • 保存到服务器
  • 等...

所以,我的问题是,如何避免这种无限循环和无限更新?

2 个答案:

答案 0 :(得分:0)

为什么不创建两个模型?从服务器同步的一个和一个被观察更改的一个。您可以创建一个服务,将其作为一个模型呈现给控制器,而不是在幕后管理差异,而不是将它们直接添加到控制器的范围内?

答案 1 :(得分:0)

您可以在客户端定义名为 changed_elsewhere 的变量。默认值 changed_elsewhere 为false。

当您在套接字上收到服务器的新值时,请将 changed_elsewhere 设置为true。然后,在观察者上,仅当 changed_elsewhere 为false时,才将新更改的值发送到服务器。如果 changed_elsewhere 为true,则表示该值已经在服务器上,您无需再次发送。

最后,您的观察者应该这样看:如果 changed_elsewhere 为真,则将 changed_elsewhere 设置为false并且不执行任何操作;如果 changed_elsewhere 为false,则将新值发送到服务器。

很抱歉,如果 changed_elsewhere 这个名字不是很有启发性,但我希望你明白我的想法。