当前页面: 开发资料首页 → J2EE 专题 → [求助]JSP的突法奇想~
[求助]JSP的突法奇想~
摘要: [求助]JSP的突法奇想~
曾经在某个网站上看过这样一个功能,类似于QQ中的一个功能:当你的一个好友上线时,会弹出一个即时消息,然后再慢慢消失。
请问在B/S结构中,或者是说在JSP中如何实现呢?
用ajax,定时访问数据库,查找新会员,有就弹出提示框!
这又不是单单指新会员。
它只是是上线的
someone is login....., mark status as online=true ;
query his friends who are online too...
send message to notice he is online now....
社区短消息
AJAX
someone is login....., mark status as online=true ;
query his friends who are online too...
send message to notice he is online now....
这样只要朋友在线就会不停得提示
加一个令牌怎么样
再加一个标志符控制,比如flag,默认flah=0,当status=online的时候,观察flag是否为0,如果为0就发出提示信息,如果是1就不发了
1.做一张消息表: message,字段如下:
id fromId toId content createTime isRead
当一个人上线时,就会给他(她)的朋友发一个消息,说明自己上线
2.在客端用ajax定时访问服务器,查询自己有没有新消息.如果有消息则在浏览器端显示,并在数据库中把message表中的那一条数据的"isRead"置为已读
flag不行,不能实现对多个好友的提示,也就是说如果上线的人有多个好友在线,而其中又有一部分人(不是全部在线好友)设定了上线提示,那样的如何实现?
我个人觉得应该从session的监听入手,用session监听在线用户数量想必大家都知道,那么当监听到有自己关注的用户登陆的时候,发出提示,就应该能实现搂住的想法了。 个人观点,仅供参考
补充一下:
1.当一个人上线时,就会给他(她)的朋友发一个消息,说明自己上线
的意思是,往message中写一条信息,并且isRead为未读(至于怎么标记,那就看各人爱好了,有人用boolean型,有人用0和1,不过我觉得用0和1更具有可扩展性)
2.至于如何判断是否上线,我想这个我就不用说了吧
感谢大家热情的帮助
谈谈我的看法
我曾经做过类似QQ的聊天软件,是C/S结构的
我觉得让客户端不断的向服务器查询有没有新消息不妥,太耗资源了
不如让客户端这里建一个线程,来监听服务器主动发来的字符流string=bufferedReader.readLine();
如果string.equals("你的朋友某某上线了");
就在屏幕左下角慢慢浮现出一个窗口(窗口不行的话,别的也行),再慢慢的消失
现在我的问题是不知道用什么技术实现客户端这里需要的功能:
怎么样才能浮现出一个窗口,然后慢慢消失
JSP能实现吗?还是要用到AJAX呢?或者是其他的?
慢慢的消失?
我做的东东你不点它的按纽它死都不会消失。
学习一下先。
我是用的JavaScript特效,网上有源码什么网页制作百宝箱之类的
你去下个看看吧!
楼主的想法是好的,但就楼主下面的两句话,我想说两句:
"我觉得让客户端不断的向服务器查询有没有新消息不妥,太耗资源了"
不如让客户端这里建一个线程,来监听服务器主动发来的字符流string=bufferedReader.readLine();"
1.请楼主看一下Htpp协议
2.请楼主搞明白什么是b/s和c/s
http是基于请求/响应范式的,如果不请求是不能和服务建立连接的.如果能和服务器建立一个线程,就也就成java版的c/s了!
至于怎么样才能浮现出一个窗口,然后慢慢消失,我觉得你去网上找一个JS特效的框吧. scriptaculous.js好像能实现你要的功能.
djy1135(晨阳) 说的很有道理,scriptaculous.js这个能传过来一份吗,我的QQ是247705592
可以用java applet向服务器URL定时发送heartbeat消息,
和ajax类似,但应该更效率,
缺点是不是所有浏览器都支持applet,比如ie6 。
记下来.
我用C/S写过类似QQ的聊天软件和一个文件传输软件(实现聊天功能).
但是“文件传输软件”没有一个很好的办法把字节流和字符流区分开,只能靠流包装解决,但是缓冲区过大的话容易引起数据丢失,所以缓冲区设得很小,而且是单线程的,有哪位仁兄用过多线程解决的?
补充一下,是一个Socket一个线程,有谁用了一个Socket多个线程解决的吗?
慢慢消失 就是传说中的”黄褪技术“吧 利用AJAX 不过相关资料我一直没查到
哪位有贡献一下啊
一般都是客户端定期查询数据库状态了
如不想客户端定期重发请求轮询,只能服务器端记录,
每个用户的session应该有记录当前user的数据库id吧?
用SessionListener把每次登录成功的session记录在某单个实例的concurrence的Map中,key可以是userid或sessionid
那么当某个login 的user登录后从数据拿到friend的userid集合,根据Map中的记录查询上述session集,拿到对应的句柄,设值用于提醒,
那么下次这些friend的请求到达时检查session发现标识则出现提醒,然后把标识清掉,
这是服务器端作记录的思路
是用黄褪技术吗?现在就是找不到资料,有提供资料丰富的AJAX论坛或网站的话给60分!!
建议使用AJAX技术 比较方便快捷