Trello如何准确地向用户显示在线/离线/空闲状态?

Ank*_*rob 4 coffeescript backbone.js trello

正如我个人所见,Trello非常准确地显示了在线/离线/闲置状态的信息.有几种解决方案可以跟踪用户的在线状态,准确地说这需要一个严重的开销.还存在不知道用户是否关闭浏览器,断开连接等导致显示离线/空闲状态不准确的传统问题.对于没有聊天功能的平台(我相信,这会占用跟踪用户状态的开销,从而使任务最终变得容易)Trello如何实现这一目标,虽然没有太大的开销?

此外,Trello能够检测到断开连接并恢复连接(尽管不是很顺利).

这里描述了Trello的推送和轮询层

Aar*_*our 5

每个浏览器选项卡都被视为与一个用户关联的会话.每个会话的活动级别都是单独跟踪的,其中显示的用户具有所有会话的最高活动级别(活动最高,然后空闲,然后断开连接).

每个选项卡定期将其当前状态发送到服务器 - 如果它有一个工作的WebSocket,则每隔5分钟发送一次.每次选项卡获得焦点时,当前状态都会重置为活动状态,或者存在keydown或mousedown事件.如果从最近的那些事件开始超过5分钟,它就会闲置.该选项卡在onunload事件中发送断开状态,但我们不依赖于此.

每次会话将其状态发送到服务器时,服务器都会查看该用户的所有会话,以确定是否表示用户状态发生了更改.如果是这样,它会向每个观看用户所在的每个棋盘的人广播这种新状态(这与Trello的其他即时更新所经历的框架相同,并且在这里解释得太复杂了).

服务器还会检查每个会话,看看它是否已经过了很长时间,因为我们已经听说过该会话(如果是WebSocket会话则为2分钟,否则为10分钟)并删除会话(如果已经存在)(删除会话表示已断开连接) ).

有一些优化隐藏在那里,但这是主要的故事.