2012-02-09 83 views
0

我正在构建一个允许用户托管房间的聊天应用程序。为了给多一点反馈:检查用户是否在页面上

  1. 用户创建房间(房间是公开的,任何人都可以查看,但如果用户还没有注册,聊天将被禁用,用户将被提示注册聊天。 )

  2. 其他用户注册了房间

  3. 用户提供基于主机的订单聊天,他们签署了

我想表明,如果主机在线或不在线。或者更进一步,显示主持人是否在房间里。

我不知道如何做到这一点。

回答

5

基本上,这个东西的工作如下。

每次用户采取行动(聊天刷新,发送消息,访问页面等)时,与用户关联的令牌(保存在服务器中的令牌,例如DB)将随当前时间更新。

| User ID  | Last action   | 
------------------------------------- 
| 14 (mark) | 2012-02-09-10:34:53 | 
| 56 (phil) | 2012-02-09-09:12:34 | 
| 9 (john) | 2012-02-09-10:33:11 | 

然后你决定了用户在线如果他的令牌是不是太旧(5/10分钟?)

如果使用AJAX可以改善这种方法来发送周期性请求服务器每1分钟左右。此AJAX请求更新令牌值。所以,这样,你可以告诉用户在线,如果他什么都不做,只要盯着页面。当他退出(关闭浏览器或标签)时,AJAX定期呼叫停止工作,因此在5/10分钟后,用户被宣布为脱机

祝你好运!

+0

所以我需要创建一个表并发送主机的操作,然后检查该用户的ID是否在特定时间间隔内有任何活动。 – Ciprian 2012-02-09 09:56:48

+1

在codeigniter中,您可以在每个控制器操作之前使用[filter](http://codeigniter.com/wiki/Filters_system)来检查用户是否已登录并更新该令牌(如果有的话)。 – Flukey 2012-02-09 09:58:12

+0

@ciprian正是如此。如果你已经有了一个供用户使用的表格(我认为你有!),你也可以在表格中添加一个新的列表。你的选择:) – 2012-02-09 10:11:10

1

假设你有在房间里5人(和一个或多个必然是活动的),做这些:

  • 为每个用户采取行动(无论是按键还是实际的消息发送),“ping”服务器(发送一条消息,表明您存在),并在事件发生的时间将其记录在数据库中。 (注意如何Facebook已经是“用户正在输入...” - 这是它反过来

  • 用于发送动作(通过AJAX我想),该服务器的回复是用户在列表通过比较当前时间和每个用户最近一次活动的时间(当前时间 - 最后活动时间=离开时间)来做到这一点

  • 知道谁在线而不是,重建在你的浏览器中的“聊天队列表”

你可以做很多的事情伊蒂埃斯。比如说允许5分钟或者其他用户闲置。如果时间差在15分钟以上,请考虑将此人关闭。

您还可以通过ping服务器以获取有关谁定期上网的更新,否则称为“心跳”而不是通过按键或每条消息发送进行更新。程序相同:告诉你在线的服务器,记录你的存在,并让它返回一个聊天队友列表。

请注意,在此应用程序(浏览器聊天)中,服务器无法知道您处于脱机状态,关闭了浏览器等,这就是为什么您需要“心跳”以及定期记录您的操作。

至于主机...您应该在主机ID上标记该房间,心跳会告诉您他是否仍处于在线状态。