您好,匿名用户
随意问技术百科期待您的加入

网页聊天,如何确定用户退出?

+2 投票

我想做一个类似于Omegle的随机网页聊天的小应用,有一些自己新加的东西,但是本质上是个网页聊天的东西。但是我是个web开发新手。

问题在于,如何维持用户的登录状态呢?也就是当已经登陆的用户刷新,关闭网页时,也可以退出,而不是使用一个链接让用户退出。

目前,已经尝试的方法有:

1、 使用ajax刷新消息,登录。退出时响应<body>的onunload事件,向服务器发送一个post。
问题:对浏览器的支持不一,导致有的浏览器没反应,或者原因是使用JQuery的$.post,或许在onunload里不能响应一些异步的事件?

2、 使用长连接,维持登录状态.
问题:长连接是否可以感受到用户的断开呢? 如果想使用类似于PHP的语言开发,那长连接会不会很占系统资源?
3、 使用Flash实现.
问题: 这是我现在能想到的实现方法,但是是不是有点简单问题复杂化了?

用户头像 提问 2012年 12月1日 @ 随意问站长 上等兵 (310 威望)
分享到:

2个回答

0 投票

1、onunload事件存在浏览器兼容性问题,参见:http://w3help.org/zh-cn/causes/SD9026

2、如果一直保持长连接,那么即使客户端断开,服务端也不一定能知道客户端已经断开,所以这里可能还需要做一些心跳记录,比如每个用户保持一个心跳flag,每格几秒更新一下最后心跳时间,当检测最后时间很久没更新后,退出这个死循环,关闭这个HTTP连接。参考来源:http://www.phpfans.org/?p=79

资源占用不会小建议使用Node.js来试试:http://cnodejs.org/blog/?p=1074
另外一个Node.js的聊天项目:https://github.com/ry/node_chat

3、Flash没有精力了解

用户头像 回复 2012年 12月1日 @ Aquarius 上等兵 (283 威望)
0 投票

如果你要判断用户是否退出,由于B/S的特性,你只能在服务器上定时检查“用户上次活动时间”,超过一定的时间(比如说3分钟)就算退出。

1. 每次当前用户访问任何页面的时候,都update一下在线表,把当前用户的“上次活动时间”设置成现在。

2. 每次任何用户访问任何页面的时候(也就是框架的全局位置,见手册),都查询一下在线表,如果在线表的用户“上次活动时间”是大于3分钟(或者其他时间),那么就删除。

这样在线表内的用户,你都可以当做当前在线的,也就是没退出网页的。

用户头像 回复 2013年 1月6日 @ Saber 中士 (1,234 威望)
提一个问题:

相关问题

+1 投票
1 回复 749 阅读
用户头像 提问 2012年 12月1日 @ Leona 上等兵 (279 威望)
0 投票
1 回复 95 阅读
0 投票
1 回复 24 阅读
0 投票
1 回复 57 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...