2014-02-18 52 views
4

Trello非常准确地显示了在线/离线/空闲状态的信息,正如我亲眼所见。有几种跟踪用户在线状态的解决方案,要准确地做到这一点需要付出很大的开销。还有传统的问题,不知道用户是否关闭浏览器,断开连接等,导致显示脱机/空闲状态的不准确。对于没有聊天功能的平台(我相信这会花费追踪用户状态的开销并因此使得任务变得简单),Trello如何实现这一点,尽管没有太多的开销?Trello如何准确显示用户在线/离线/闲置状态?

另外Trello能够检测到断开并恢复连接(虽然不太顺利)。

Trello的推动和轮询层使用socket.io ..所以当过用户登录它播出的用户登录消息中描述here

+3

您可能想签出NodeUp的[this](http://nodeup.com/fiftyfour)集。 Trello的开发人员进行了访谈,并详细讨论了他们的用户存在检测方法。 –

回答

5

每个浏览器选项卡都被认为是与一个用户相关联的会话。每个会话的活动级别都是分开跟踪的,用户会看到所有会话的活动级别最高(活动最高,然后空闲,然后断开连接)。

每个选项卡周期性地将其当前状态发送到服务器 - 如果它有一个可用的WebSocket,则每隔一分钟发送一次,否则每隔5分钟发送一次。每次选项卡获得焦点时,当前状态都会重置为活动状态,或者存在keydown或mousedown事件。如果距离最近的那些事件已经超过5分钟,它就会闲置。该选项卡在onunload事件中发送断开连接的状态,但我们不依赖于此。

每次会话将其状态发送到服务器时,服务器都会查看该用户的所有会话,以确定是否指示更改用户的状态。如果确实如此,它会向每个观看用户所在董事会的每个人广播新的状态(这与Trello的其他即时更新所经历的框架相同,并且在此处解释过于复杂)。

服务器还会检查每个会话,看它是否从我们从该会话中听到的时间太长(如果是WebSocket会话,则为2分钟,否则为10分钟),如果会话已经移除,则删除会话表示它已断开连接)。

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

+0

虽然不建议按照SO,我想感谢你的答案:) –

+0

很高兴帮助! –

1

Trello,然后他们表现出他作为在线。 一旦他断开连接,他们会再次在套接字上发送消息,让他脱机。

许多实时应用程序使用socket.io显示实时活动。

+0

Trello不再使用'socket.io'(除了支持较旧的客户端)。 –

+0

@AaronDufour我刚拉起他们的js,它就在那里:'这个应用程序使用其他第三方javascript组件 分发在适当的许可证下。 请参阅以下内容: ... socket.io.js http://socket.io/ ' – jcollum

+1

@jcollum该代码仍在那里,但它的死亡。如果我们的新插座解决方案不能按比例保持,我们希望能够轻松地回归到它,但它确实如此。我是Trello的开发者,为了记录。 –

相关问题