我正在构建一个允许用户托管房间的聊天应用程序。只是为了提供更多反馈:
用户创建空间(房间是公开的,任何人都可以查看,但如果用户未注册,将禁用聊天,系统将提示用户注册聊天。)
其他用户注册
用户根据他们注册的订单与主持人聊天
我想表明主持人是否在线。或者更进一步,显示主持人是否在房间里。
我不知道该怎么做。
答案 0 :(得分: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分钟后,用户被宣布为离线。
祝你好运!答案 1 :(得分:1)
假设你在房间里有5个人(并且一个或多个人必须活跃),请执行以下操作:
对于用户执行的每个操作(无论是击键还是实际的消息发送),“ping”服务器(向其发送您存在的消息)并将其记录(可能在您的数据库中)时间那件事发生了。 (请注意facebook如何“用户正在输入...” - 就是这样。
反过来发送该动作(通过我认为的ajax),服务器的回复是该房间中在线但不在线的用户列表。通过比较当前时间与每个用户的上次活动时间(当前时间 - 上次活动时间=离开时间)来做到这一点
知道谁在线,不在浏览器中重建“聊天伴侣列表”
你可以做很多种可能性。比如说允许5分钟,否则,该用户是空闲的。如果时间差15分钟或更长时间,请考虑该人员。
您还可以更进一步,通过ping服务器以获取有关谁定期在线的更新,否则称为“心跳”,而不是通过按键或每次发送消息来执行此操作。程序是一样的:告诉服务器你在线,记录你的存在,并让它返回一个聊天伙伴列表。
请注意,在此应用程序(浏览器聊天)中,服务器无法知道您处于离线状态,关闭浏览器等,这就是您需要“心跳”以及定期记录操作的原因。
至于主持人...你应该用主机ID标记那个房间,心跳会告诉你他是否还在线。