Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Trello如何准确地向用户显示在线/离线/空闲状态?_Backbone.js_Coffeescript_Trello - Fatal编程技术网

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

Backbone.js Trello如何准确地向用户显示在线/离线/空闲状态?,backbone.js,coffeescript,trello,Backbone.js,Coffeescript,Trello,正如我个人所看到的,Trello非常准确地显示了在线/离线/空闲状态的信息。有几种解决方案可用于跟踪用户的在线状态,要准确地跟踪用户的在线状态,需要大量的开销。还有一个传统问题,即不知道用户是否关闭了浏览器、断开了连接等,这会导致脱机/空闲状态显示不准确。对于一个没有聊天功能的平台(我相信,这会占用跟踪用户状态的开销,从而使任务最终变得容易),Trello如何实现这一点,尽管没有太多开销 此外,Trello还能够检测断开连接并恢复连接(尽管不是很顺利) Trello的推送和轮询层是使用socke

正如我个人所看到的,Trello非常准确地显示了在线/离线/空闲状态的信息。有几种解决方案可用于跟踪用户的在线状态,要准确地跟踪用户的在线状态,需要大量的开销。还有一个传统问题,即不知道用户是否关闭了浏览器、断开了连接等,这会导致脱机/空闲状态显示不准确。对于一个没有聊天功能的平台(我相信,这会占用跟踪用户状态的开销,从而使任务最终变得容易),Trello如何实现这一点,尽管没有太多开销

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


Trello的推送和轮询层是使用socket.io描述的。。所以,当用户登录时,它会广播一条用户已登录的消息,然后显示他在线。 一旦他断开连接,他们会再次在套接字上发送消息,显示他脱机


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

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

每个选项卡定期向服务器发送其当前状态—如果它有一个工作的WebSocket,则每分钟发送一次,否则每5分钟发送一次。每次选项卡获得焦点,或出现按键下降或鼠标下降事件时,当前状态将重置为“活动”。如果最近一次事件发生后已超过5分钟,它将处于空闲状态。选项卡在onunload事件中发送断开连接的状态,但我们不依赖于此

每次会话将其状态发送到服务器时,服务器都会查看该用户的所有会话,以确定这是否表示用户状态发生了更改。如果是这样的话,它会向每一个观看用户所处的每一块板的人广播新的状态(这与Trello的其他即时更新所采用的框架相同,而且太复杂了,这里无法解释)

服务器还检查每个会话,以查看自我们听到该会话以来它是否太长(如果是WebSocket会话,则为2分钟,否则为10分钟),并删除该会话(删除会话表示它已断开连接)


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

您可能想查看NodeUp的一集。Trello的开发人员接受了采访,并详细讨论了他们的用户状态检测方法。Trello不再使用
socket.io
(支持旧客户端除外)@AaronDufour我刚刚调出了他们的js,它就在那里:
这个应用程序使用了其他第三方javascript组件,这些组件是在适当的许可证下分发的。有关详细信息,请参阅以下内容:。。。socket.io.jshttp://socket.io/ 
@jcollum代码仍然在那里,但已经死了。如果我们的新插座解决方案不能保持规模,我们希望能够轻松地回到它,但它做到了。我是特雷洛·戴夫,我只是想说一句话。Socket.io很难在多个dynos(群集环境)上进行扩展。因此,对于大规模应用程序,人们要么管理自己的套接字服务器,要么使用一些第三十方套接字客户端。但所有第三方客户机也在套接字之上工作。我的团队正在使用Pusher作为套接字客户端。@AaronDufour:Trello是个不错的应用程序。甚至我的团队也在使用它。我们正在进行诸如聊天和实时订阅等实时活动。我们在socket.io上构建了解决方案。但在部署到heroku上时面临着扩展问题。所以,如果我们部署在多个dyono上,应用程序就会中断。现在我们使用的是“推进器”。您能提出更好的解决方案吗?虽然根据SO不推荐,但我想感谢您的回答:)