前段时间因为系统的需要,非得要加个消息提醒的通讯的功能。本来最最初是准备用C/S的方式实现的,但考虑到要做客户端,以后维护是一件相当麻烦的事情。对其程序进行任何修改都将要更新每一台机器的程序,而且程序运行还要安装FRAMWORK,以后升级维护都觉得有很多隐患。经过考虑觉得因该和现有系统结合(现有系统是。NET开发的B/S结构),于是萌发了做一个WEBQQ的想法。以前好象在网上有看过一个叫快狗的东西,我觉得别人既然能做我因该也可以做一个类似功能的东西吧。在网上找了一个控件用来做类似QQ的界面,其实可以用树型结构来做的,只是为了看的眩一点,呵呵。
  程序实现以下几个基本功能
1、可以显示在线人员,并既时的反映人员的在线情况,上下线比较迅速的反映出来。
2、可以在不同分组里选择人员发送信息
3、可以消息群发
4、发送的消息要既时的让对放收到。
刚开始做的时候认为功能不对,因该很容易实现,但是实际做的时候才发现在WEB上实现类似功能没有想的那么简单。
  首先是人员在线问题,我的想法是弄一个在线人员表来记录在线人员情况,当有人上线的时候时候就插入信息,下线的时候就删除信息。分组信息(既部门信息)以及人员信息都从现有系统的的表里读取,取取的时候取在线人员表,如果该人在显线则代表人员的图片为亮色,并把顺序提前,否则则为灰色。如下图:


遇到的一个问题是如何既时的获取人员的在线情况,我的方法是用JAVASCRIPT里面的setInterval方法来动态的加载一个JS文件,JS文件是由程页面生成的,他用来判断用户登录时的在线人员表是否和数据库里目前的表内容一致,如果不一致则当前也面重新加载。
 1    <script language=javascript>
 2<!--
 3function cc()
 4{
 5document.all.check.src="checkout2.aspx";
 6
 7}
 8setInterval("cc()",5000);
 9
10//-->
11</script>
这样可以在不刷新页面的情况下动态取得人远在线情况
CHECKOUT2。ASPX中判断是否重新加载页面
 1DataTable dtt=(DataTable)Session["online"];
 2                if (dt.Rows.Count==dtt.Rows.Count) 
 3                {
 4                    foreach(DataRow r in dt.Rows)
 5                    {
 6                        if(dtt.Select("userid="+r["userid"].ToString()).Length<1)
 7                        {
 8                       //Response.Write("<script language=javascript></script>");
 9                            Response.Write("parent.main.location.href='qqmain.aspx';");
10                        Session["online"]=dt;
11                            return;
12                        }

13                    }
    上面完成了人员上线的问题解决方法,下线比较好解决,也是用JAVASCRIPT,在页面的onunload事件中掉用如下方法
 1<script language="javascript">
 2<!--
 3
 4function logout()
 5{
 6
 7
 8    var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
 9    xmlhttp.open("post""out.aspx"false);
10    xmlhttp.send("");
11    
12
13}
14//-->
15    </script>
该方法是为了在后台调用OUT。ASPX页面,该页面的功能就是将当前用户从在先表中删除
1string sql="delete from user_online where userid='"+this._UserID+"'";
2            Data.EditData(sql);
以上就完成了一个WEBQQ基本的上下线功能,哎觉得写文字没有写程序通顺,希望大家能理解我的思路。上面方法其实存在一个问题,就是当用户非法退出的时候删除在线信息的功能可能无发执行(比如浏览器非法操作了),目前的解决方法是在一天中的某个时间段删除一次在线人员表,程序发现当前的在线信息和数据库的信息不一致的时候会自动重新加载一次页面,相当于更新了一次在线人员信息。反正以上方法思路可以保证80%以上有效,如果大家有更好的建议和方法可以告诉我一起交流一下。文字写的不好,多多见谅。下次谈谈如何搞定消息的即时发送和接收的问题。
posted on 2005-07-09 11:22 DarkAngel 阅读(3518) 评论(11)  编辑 收藏 网摘

  回复  引用  查看    
2005-07-09 14:29 | 小迪      
最好提供代码学习一下
zwg1118@citiz.net

  回复  引用  查看    
2005-07-09 14:29 | 小迪      
最好提供代码学习一下
zwg1118@citiz.net

  回复  引用  查看    
2005-07-09 14:48 | DarkAngel      
等把后面一部分发完我会放上的,但是因为和现有系统有些结合点,出于职业操守会去掉一部分,但是不影响整体思想
  回复  引用    
2005-07-09 20:52 | coder [未注册用户]
Browse端定时刷新,比如每2分钟一次。
服务端记录登录用户客户端刷新的最后时间。
服务端定时检测超期的登录用户,比如每5分钟一次,将超期的删除。


  回复  引用    
2005-07-09 23:25 | 天才.net [未注册用户]
这种方法,看起没问题,但行不通
如果用户结束浏览器进程,或者意外掉线,就不是激发logout事件

必须配合session处理
发送消息用SQL作为载体是不错的想法

因为BS用户间不能通信 必须B-S-B模式
另一端刷新检测是否有新的消息,接收并删除SQL数据

如果有兴趣可联系我
msn:cn@msdn.net
我做一个比较成熟的WEB QQ 可语音可 视频 传送文件

不错的技术性文章,值得参考
  回复  引用    
2005-07-11 17:22 | PointNet [未注册用户]
支持更期待下面的文章!
  回复  引用    
2005-07-15 14:23 | wj [未注册用户]
最好提供代码学习一下
bfwqc@163.com

  回复  引用    
2005-09-07 11:32 | 冬瓜茶 [未注册用户]
有QQ联系么 想请教你几个问题 关于WEBQQ的
我的QQ43822035

  回复  引用  查看    
2006-05-07 09:10 | 小邓      
最好能提供代码学习一下。
jxzhit@163.com

  回复  引用    
2006-10-08 16:06 | 飘零 [匿名] [未注册用户]
@天才.net
如果可以的话 加我的 QQ 10165904
注明:WEB QQ 谢谢........


发表评论



姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接: