社区
Java EE
帖子详情
毕业设计 web聊天室 怎样判断用户已离线
tom_66
2011-03-06 02:57:26
基本上想好了用struts2 hibernate做,聊天那一块也已经用jquery ajax实现了,
但是不知道有什么好的方法来处理用户退出的问题
用户登陆后将用户加到application中好不好?
怎样在用户点击退出按钮或者关闭浏览器时在在线用户列表中删除用户信息?
等级太低,只能给100分。
如果有这一块的源码,希望能分享一下。
各位大哥大姐,老鸟,高手,帮帮忙吧……
...全文
852
47
打赏
收藏
毕业设计 web聊天室 怎样判断用户已离线
基本上想好了用struts2 hibernate做,聊天那一块也已经用jquery ajax实现了, 但是不知道有什么好的方法来处理用户退出的问题 用户登陆后将用户加到application中好不好? 怎样在用户点击退出按钮或者关闭浏览器时在在线用户列表中删除用户信息? 等级太低,只能给100分。 如果有这一块的源码,希望能分享一下。 各位大哥大姐,老鸟,高手,帮帮忙吧……
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
47 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
修心-明
2011-03-08
打赏
举报
回复
先在web.xml中配好监听器
<listener>
<display-name>StartListen</display-name>
<listener-class>com.zykj.StartListen</listener-class>
</listener>
监听器代码如下:
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import com.zykj.dao.UsersOper;
import com.zykj.entity.Users;
public class StartListen implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent arg0) {
}
//用户退出session时。但不会马上执行,tomcat默认为30分钟,你可以更改(/conf/web.xml)
public void sessionDestroyed(HttpSessionEvent arg0) {
try {
Users u = (Users) arg0.getSession().getAttribute("user");
UsersOper uo=new UsersOper();
uo.updateStart(u.getUId(), 3);
uo.deleteTemporaryFriend(u.getUId());
System.out.println(u.getUId()+"下线了");
} catch (Exception e) {
e.printStackTrace();
}
}
}
暗然的白天
2011-03-08
打赏
举报
回复
用户放在一个单例集合里、上线给一个状态添加进去,下线给一下状态并移除。页面定时访问这个集合并展示。消息就放在xml文件里吧,格式比较容易读取。
magong
2011-03-08
打赏
举报
回复
[Quote=引用 28 楼 fclxyz 的回复:]
晚上结贴,在线用户这一块已经解决了,求聊天这一块思路
[/Quote]
聊天嘛,
得每个客户端主动周期性到服务器取新的聊天文本。
强长黑粗硬
2011-03-08
打赏
举报
回复
聊天功能我是客户端定时提交请求,然后查看有没有发给自己的消息。
至于消息的保存,到DB,放在内存,或者写到文件都随便
ma309385560
2011-03-08
打赏
举报
回复
用定时刷新做聊天功能 有点 建议看看推技术
pang040328
2011-03-08
打赏
举报
回复
首先要弄清楚,离线和下线的定义是不一样的,对于在规定时间内无任何操作的行为定义为“离线”,而关闭应用程序的操作被定义为”下线“。对于下线用户的判断,可以在设计数据库时在user表中加上IsOff字段进行判断,对于离线的判断可以加一个时间戳来判断
zhouluok007
2011-03-08
打赏
举报
回复
聊天这块 最好使用AJAX 做到无刷新效果 个人认为用JSON 对象比MAP好用
liguangwen86
2011-03-08
打赏
举报
回复
session 监听器可以看一下
Cike121272604
2011-03-08
打赏
举报
回复
[Quote=引用 28 楼 fclxyz 的回复:]
晚上结贴,在线用户这一块已经解决了,求聊天这一块思路
[/Quote]
聊天思路......麻烦lz说明白点.
Cike121272604
2011-03-08
打赏
举报
回复
[Quote=引用 20 楼 woodlikewater 的回复:]
我觉的应该由客服端 通过ajax定时给服务端发送信息。。 表示他在线。。用struts2 action的一个方法提供页面访问,参数为用户id 和sessionid
用一个map<String,Date> 类型来存储当前在线用户 key存储用户id value存储最新更新时间
当用户访问用struts 对应的在线方法时候。 先判断map里面是否存有对应用户id 不存在则加入。。时间为当前……
[/Quote]
嗯,这个公告就是这么干的,在线聊天好像也这么弄,不知道在这里行不行...
G_beginner
2011-03-08
打赏
举报
回复
[Quote=引用 28 楼 fclxyz 的回复:]
晚上结贴,在线用户这一块已经解决了,求聊天这一块思路
[/Quote]
聊天的思路?
tom_66
2011-03-08
打赏
举报
回复
晚上结贴,在线用户这一块已经解决了,求聊天这一块思路
强长黑粗硬
2011-03-08
打赏
举报
回复
这个就是说的之前问的那个吧。
算法多种多样,LZ选个合适的就好了,不过我觉得定时刷新,服务器负担会不会很重呀?
不过这种基于http的聊天系统,定时刷新倒是免不了的。
另外大家都说用js判断浏览器关闭。
如果该用户是骨灰级,关闭浏览器是用电源开关的怎么办?
或者在偏远山区,总掉电,这个除非他自己来报道,不然谁也不知道吧。
a619225471
2011-03-08
打赏
举报
回复
学习了
tom_66
2011-03-08
打赏
举报
回复
判断用户是否在线那一块早上已经实现了,是根据昨天说用侦听器的那位高手的意识来弄的
帖子结了
veardn
2011-03-08
打赏
举报
回复
如果用户点浏览器“后退”而不关闭浏览器呢
可以让用户每过一段时间向服务器发送一个特定请求表示该用户正在线,如果服务器有1次没接收到某个在线用户的这个请求,则认定该用户离线
shagan
2011-03-08
打赏
举报
回复
1、等待session过期,具体上面有人讲了
2、浏览器动作,比如窗口关闭时,触发一个事件,再调用logout动作。
3、HTTP是无状态,但可以长连接,一旦连接断了,即logout,可网上查commet技术。Gmail用类似技术
焙焙龙
2011-03-08
打赏
举报
回复
HTTP是无状态的,只能通过Session来模拟状态,所以,服务器对客户端的感知是依赖于发起自客户端的请求的。
要想实现聊天的目的,那么客户端必须往服务器发心跳报文,一来报告自己存活,二来轮询服务器上有无自己的消息,如果有的话就通过response带回。
服务器就是一个瞎子,你喊他他才知道是谁,不能指望服务器去判定客户端是否存活,就好想不能让瞎子去判定刚才喊他的人还在不在
bjliuzg
2011-03-08
打赏
举报
回复
<html>
<script language="javascript">
window.onbeforeunload = function()
{
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if(b && window.event.clientY < 0 || window.event.altKey)
{
window.event.returnValue = "";
alert('close');
}
}
</script>
上面是判断IE关闭的例子,在这个方法中取得用户信息,利用AJAX和后台通讯,将该用户的登录状态置成未登录,明白了吗,如果不会ajax的话可以再提问。
iamwhee
2011-03-08
打赏
举报
回复
牛X的session
加载更多回复(24)
基于TCP/IP协议的网络
聊天室
毕业设计
:从架构到实现全解析
本文详细解析基于TCP/IP协议的C/S架构网络
聊天室
毕业设计
,涵盖选题拆解、消息协议设计(长度头+JSON)、服务端并发模型(线程池/Selector)、心跳机制、粘包拆包处理、客户端界面解耦等核心技术。重点阐述Socket编程、多线程通信、TCP可靠性保障及系统测试方法,适用于网络工程与软件工程专业毕设实践。
基于Qt、C++和SQL的
聊天室
项目实战:从架构到打包全解析
本文详解基于Qt框架、C++语言与SQL数据库实现的桌面端
聊天室
项目,涵盖C/S架构设计、TCP网络通信(含粘包处理与心跳机制)、JSON消息协议、SQLite数据库设计与接入、Qt多线程UI更新、跨平台打包发布等核心技术点,适用于提升C++工程实践能力,尤其聚焦网络编程、GUI开发与数据持久化整合。
Vue.js+Node.js+MySQL实战:在线
聊天室
源码全解析
本文深入剖析基于Vue.js、Node.js与MySQL构建的在线
聊天室
全栈实现。重点涵盖技术栈选型逻辑(Vue响应式前端、Node事件驱动后端、MySQL持久化存储)、数据库建模(
用户
/消息表设计、在线状态与已读机制)、socket.io实时通信链路(命名空间/房间管理、消息广播与ACK确认)、Pinia状态管理与断线重连策略,以及本地联调常见问题(CORS配置、MySQL 8.0认证插件兼容、Node版本与依赖安装)。内容聚焦工程落地细节与生产级优化方向。
校园网
聊天室
实战:Python Socket多线程通信与协议设计
本文介绍基于Python Socket与Tkinter开发的校园网局域网
聊天室
系统,涵盖自定义文本协议设计、多线程服务端并发管理、心跳机制断线检测、客户端消息分发与跨线程UI更新、SQLite历史消息存储,以及校园网环境下的IP配置、防火墙放行和粘包/半包处理等关键技术。重点突出底层通信原理可解释性与课程设计可展示性。
Java
毕业设计
实战:从零构建即时通讯系统,掌握网络编程与并发核心技术
本文详解基于Java的C/S架构即时通讯系统
毕业设计
,涵盖Socket/Netty网络编程、多线程并发处理、JSON消息协议、Swing/JavaFX GUI开发、JDBC/MyBatis数据持久化及HikariCP连接池等核心技术。重点解析双线程模型、在线
用户
管理、消息路由、
离线
存储与安全加密实现,适合作为计算机专业毕设选题与Java网络编程能力提升项目。
Java EE
67,535
社区成员
225,844
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章