DarkAngel的思维空间
博客园
首页
新随笔
新文章
联系
管理
订阅
随笔- 48 文章- 2 评论- 157
关于WEBQQ的实现(一)
前段时间因为系统的需要,非得要加个消息提醒的通讯的功能。本来最最初是准备用C/S的方式实现的,但考虑到要做客户端,以后维护是一件相当麻烦的事情。对其程序进行任何修改都将要更新每一台机器的程序,而且程序运行还要安装FRAMWORK,以后升级维护都觉得有很多隐患。经过考虑觉得因该和现有系统结合(现有系统是。NET开发的B/S结构),于是萌发了做一个WEBQQ的想法。以前好象在网上有看过一个叫快狗的东西,我觉得别人既然能做我因该也可以做一个类似功能的东西吧。在网上找了一个控件用来做类似QQ的界面,其实可以用树型结构来做的,只是为了看的眩一点,呵呵。
程序实现以下几个基本功能
1、可以显示在线人员,并既时的反映人员的在线情况,上下线比较迅速的反映出来。
2、可以在不同分组里选择人员发送信息
3、可以消息群发
4、发送的消息要既时的让对放收到。
刚开始做的时候认为功能不对,因该很容易实现,但是实际做的时候才发现在WEB上实现类似功能没有想的那么简单。
首先是人员在线问题,我的想法是弄一个在线人员表来记录在线人员情况,当有人上线的时候时候就插入信息,下线的时候就删除信息。分组信息(既部门信息)以及人员信息都从现有系统的的表里读取,取取的时候取在线人员表,如果该人在显线则代表人员的图片为亮色,并把顺序提前,否则则为灰色。如下图:
遇到的一个问题是如何既时的获取人员的在线情况,我的方法是用JAVASCRIPT里面的setInterval方法来动态的加载一个JS文件,JS文件是由程页面生成的,他用来判断用户登录时的在线人员表是否和数据库里目前的表内容一致,如果不一致则当前也面重新加载。
1
<
script language
=
javascript
>
2
<!--
3
function
cc()
4
{
5
document.all.check.src
=
"
checkout2.aspx
"
;
6
7
}
8
setInterval(
"
cc()
"
,
5000
);
9
10
//
-->
11
</
script
>
这样可以在不刷新页面的情况下动态取得人远在线情况
CHECKOUT2。ASPX中判断是否重新加载页面
1
DataTable 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
4
function
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页面,该页面的功能就是将当前用户从在先表中删除
1
string
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-09 23:59 |
乖狗狗觉得很累,想停下来,休息一会儿
不错的技术性文章,值得参考
回复
引用
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
(仅博主可见)
验证码
*
看不清,换一张
内容(请不要发表任何与政治相关的内容)
今天你闪了吗?
《C# 3.0设计模式》65折特惠
Remember Me?
登录
使用高级评论
新用户注册
返回页首
[使用Ctrl+Enter键可以直接提交]
导航:
网站首页
社区
新闻
博问
闪存
网摘
招聘
.NET频道
知识库
找找看
Google站内搜索
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务
相关文章:
相关链接:
最新IT新闻:
19岁天才黑客发布首个iPhone 3GS破解软件
新浪邮箱大本营粉墨登场!Sina.cn开放注册
IE市场份额首次跌破60%
Google App Engine宕机6小时——云的安全在哪里?
微软新推社交网站Windows Live Planet
公告
刚在博客园安家,希望结交更多的朋友
<
2005年7月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参与的团队
SharePoint团队(0/0)
.NET 控件与组件开发(0/0)
上海.NET俱乐部(0/0)
Windows Mobile 应用开发(0/0)
武汉.NET俱乐部(0/0)
Ajax&Atlas技术团队(0/0)
随笔分类
(42)
C#.Net(17)
电子书(1)
设计模式(21)
新闻(3)
随笔档案
(48)
2007年5月 (1)
2006年11月 (2)
2006年9月 (1)
2006年7月 (1)
2006年5月 (4)
2006年4月 (2)
2006年1月 (2)
2005年9月 (1)
2005年8月 (15)
2005年7月 (6)
2005年6月 (13)
文章分类
(2)
C#.Net(2)
文章档案
(2)
2005年6月 (2)
相册
mypicture
收藏夹
C#之父
CodeProject
SourceForge
兄弟联盟
武汉开发者网络
ζ浮云¢惊龙
超黑时空
粪发图墙
秦人
积分与排名
积分 - 56280
排名 - 1086
最新评论
1. re: Browser.Net浏览器c#开发(开源)
想问下楼主,如何获得,页面的url ,我的意思就是说,打开google,搜索过后再点击其中的连接,会直接出来ie的浏览器,我想获取点击的url然后自动添加标签,(现在不知道如何获取点击的url,如果有...
--Chen_junheng
2. re: Browser.Net浏览器c#开发(开源)
弹出页面没处理。
--bighorse
3. re: 带验证功能的的TextBox
永远支持你的博客!
--王根慧12112
4. re: Browser.Net浏览器c#开发(开源)
没状态栏,有没办法把状态栏写进来,其他的都不错
--李aaa
5. re: Browser.Net浏览器c#开发(开源)
您好。我是一个初级者。我正尝试编辑一个浏览器程序。这过程中遇上了困难。你的代码的确有点乱……真的是第一次接触这中较高层次的编程。如果你有MSN……或我们就用电邮互相交流可以吗?
--远方的小郭
阅读排行榜
1. Browser.Net浏览器c#开发(开源)(4842)
2. 新鲜出炉,几分钟以前刚刚完成,一个带自定义分页,排序功能的DATAGRID控件(公开源码)(4184)
3. 关于WEBQQ的实现(一)(3518)
4. 关于在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户(2978)
5. 跨页面的多选功能实现(2421)
评论排行榜
1. 新鲜出炉,几分钟以前刚刚完成,一个带自定义分页,排序功能的DATAGRID控件(公开源码)(43)
2. Browser.Net浏览器c#开发(开源)(28)
3. WEBPART结合实际的应用(.Net2005)(15)
4. 关于WEBQQ的实现(二) (14)
5. 一个端口扫描的小程序(12)