Trello正如我个人所见,非常准确地显示了在线/离线/闲置状态的信息。有几种解决方案可以跟踪用户的在线状态,准确地说这需要一个严重的开销。还存在不知道用户是否关闭浏览器,断开连接等导致显示离线/空闲状态不准确的传统问题。对于没有聊天功能的平台(我相信,这会占用跟踪用户状态的开销,从而使任务最终变得容易)Trello如何实现这一目标,虽然没有太大的开销?
此外,Trello能够检测到断开连接并恢复连接(尽管不是很顺利)。
描述了Trello的推送和轮询层here
答案 0 :(得分:5)
每个浏览器选项卡都被视为与一个用户关联的会话。单独跟踪每个会话的活动级别,显示用户所有会话的最高活动级别(活动最高,然后空闲,然后断开连接)。
每个标签会定期将其当前状态发送到服务器 - 如果它有一个正常工作的WebSocket,则每隔5分钟发送一次。每次选项卡获得焦点时,当前状态都会重置为活动状态,或者存在keydown或mousedown事件。如果从最近的那些事件开始超过5分钟,它就会闲置。该选项卡在onunload事件中发送断开状态,但我们不依赖于此。
每次会话将其状态发送到服务器时,服务器都会查看该用户的所有会话,以确定是否表示用户状态发生了更改。如果是这样,它会向每个观看用户所在的每个棋盘的人广播这种新状态(这与Trello的其他即时更新所经历的框架相同,并且在这里解释起来太复杂了。)
服务器还会检查每个会话,看看它是否已经过了很长时间,因为我们已经听说过该会话(如果是WebSocket会话则为2分钟,否则为10分钟)并删除会话(如果已经删除会话)它是断开的。)
有一些优化隐藏在那里,但那是主要的故事。
答案 1 :(得分:1)
Trello使用socket.io ..因此,当用户登录时,它会广播用户已登录的消息,然后他们将其显示为在线。 一旦他断开连接,他们再次在套接字上发送消息以显示他离线。
许多实时应用程序使用socket.io来显示实时活动。