我正在构建一个前端使用Angular.js和Socket.IO&背面是Express上的Redis。
套接字的基本用途是允许一种类型的用户将项目推送到由第二种类型用户的组使用的列表中。
一个简单的例子:学生可以将消息推送到班级列表中,只有该班级的老师才能看到该列表。
我正在尝试在不同时间连接的多个教师之间同步列表,这些列表存储在Redis商店中,我想知道同步客户端的正确方法是否是
A。在每次更新时发送列表-省去了在客户端管理同步和潜在的不匹配的需要。
B。仅在连接时发送列表,并对连续事件应用增量更新。
我相信这在过去已经得到了解决,因为这似乎是套接字通信的一个基本问题,但我没能找到一个明确的答案。
谢谢!
如果列表不是特别大,那么我认为您应该选择简单的列表。我能想到的最简单的事情如下:
-
Student创建对列表的更改并将消息发送到服务器(可以是ajax调用,不必是web套接字)。
-
服务器接收消息并将其放入适当的列表存储中。
-
然后,服务器查找监视该列表的任何客户端,并向它们发送更新消息。
-
教师连接到服务器。教师正在监控的任何列表都会全部发送给教师,并且他们会订阅这些列表的更新。
通过这种方式,您永远不会真正进行同步,这简化了很多事情——您只需要进行下载列表,然后进行增量更新。这里只有一家专卖店。如果客户离线,他们只会得到一份新的列表副本,并在重新在线时重新订阅更新。避免同步会使整个解决方案简单得多。这是假设数据不是特别大,所以根据需要只获取列表的新副本是可行的。
如果你确实想进行同步,那么一个相当简单的技术是在服务器上维护一个商店的主副本,并让每个零钱交易硬币都有一个单调增加的交易ID。然后,每个同步副本可以跟踪他们同步的最后一个交易ID,并请求此后的所有交易。数据存储需要将所有更改作为事务进行跟踪(通常通过写入每个事务的事务日志或某些数据库中的功能),以便任何正在同步的客户端都可以回放任何给定的事务集。