同步多个Socket.io客户端

时间:2014-09-30 21:33:22

标签: javascript websocket redis socket.io synchronization

我正在构建一个使用Angular.js作为前端和Socket.IO&的应用程序。 Redis on Express背面。

套接字的基本用法是允许一种类型的用户将项目推送到第二类用户组所使用的列表。

一个简单的例子: 学生可以将消息推送到班级列表中,只有该班级的老师才能看到该列表。

我正在尝试在不同时间连接的多位教师之间同步列表, 列表存储在Redis商店中,我想知道同步客户端的正确方法是否正确:

一个。在每次更新时发送列表 - 无需在客户端管理同步并且可能存在错误匹配。

B中。仅在连接时发送列表,并对后续事件应用增量更新。

我确信这在过去已得到解决,因为它似乎是套接字通信的一个基本问题,但我无法找到明确的答案。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果列表不是特别大,那么我认为你想要用简单的东西。我能想到的最简单的事情如下:

  1. 学生创建对列表的更改并向服务器发送消息(可能是ajax调用,不必是Web套接字)。

  2. 服务器收到消息并将其放入相应的列表存储区。

  3. 然后,服务器会查找监控该列表的任何客户端并向其发送更新消息。

  4. 教师连接到服务器。教师正在监控的任何列表都会全部发送给教师,他们会订阅这些列表的更新。

  5. 通过这种方式,您实际上从未真正进行同步,这简化了很多事情 - 您只是在下载列表,然后是增量更新。那里只有一家主店。如果客户离线,他们只需获得清单的新副本,并在他们重新上线时重新订阅更新。避免同步使整个解决方案变得更加简单。这假设数据不是特别大,因此根据需要获取列表的新副本是可行的。

    如果您确实想要进行同步,那么一种相当简单的技术是在服务器上维护商店的一个主副本,并使每个更改事务都成为单调增加的事务ID。然后,每个同步的副本只能跟踪它们同步的最后一个事务ID,并从那时起请求所有事务。数据存储需要将所有更改跟踪为事务(通常通过写入每个事务的事务日志或某些数据库中的某个功能),因此任何给定的事务集都可以为正在同步的任何客户端播放。