标题:[经验]渚薰的ASP畅谈(七)聊天室技术☆☆☆
只看楼主
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
 问题点数:0 回复次数:9 
[经验]渚薰的ASP畅谈(七)聊天室技术☆☆☆
  • 聊天室,在我记忆中是7、8年前很火的一种网上社交方式了。现在,QQ基本已经取代了这种社交方式。虽然我并不怎么清楚,QQ的技术是如何压过聊天室技术的。但,有一点,我的猜测大概是对的,那就是,web应用程序很难在网络通信上打败客户端应用程序。为什么?
  • 首先,HTTP请求是无状态的。它并不知道此刻和下一秒请求的两个网页是否是同一个人,它只会不停的生成网页的一个副本发送给请求者。既然不知道请求者是谁,那么当然不可能做到一个请求者能够响应另一个请求者的请求。通俗点说,就是,在网上的两个人,通过同一个网站,他们完全不能通过点对点的来进行通信。如此就延伸出一个问题。对于聊天室,那怎样才能看到别人发出的信息呢?答案是不停的自动刷新页面!
  • 众人的聊天记录一般是保存在数据库里的(很不推荐放在Application里,因为Application是驻留在服务器内存上,保存在Application里,将造成服务器资源的大量被占用),因此,显示内容其实就是请求一次数据库。但是,请求数据库的开销是相当大的,而且受网络的影响突出。而且,假如,众人在很长一段时间内并没有更新消息,但各个用户的浏览器还是在不停的刷新页面,请求数据库,这种资源浪费绝对是可耻的。那,该怎样做到只有当消息被更新时才请求数据库呢?
  • 前面提到过,HTTP请求是无状态的,任何当前用户都不可能被动响应对方的请求,要通过主动刷新页面来间接获得对方的请求。在仅有此法的前提下,该怎么来最大限度的降低开销呢?答案是用系统级会话来充当这个重任。由于Application对象是对当前所有用户可见的,如此就相当于一个全局变量,任何用户都可以引用它,修改它。如此,需要解决如上问题的原理就很简单了。
  • 当某个用户更新聊天内容(数据库)时,Application对象就更新(可以赋值成当前时间,也可以赋值成一个新的状态值)。其他用户不停的刷新页面来检查Applicatino值是否被更新(原有的Application值可以保存在Session对象里)。当确认被更新后,此时再请求数据库。由于Application是保存在服务器内存上的,所以起访问速度相当快。这样就避免了频繁请求数据库带来的资源浪费和网络延时。
搜索更多相关主题的帖子: 聊天室 ASP 经验 畅谈 技术 
2006-08-09 22:24
mz520888
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-7-25
得分:0 
新思维!
2006-08-09 22:35
zhoujianwei
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2006-7-3
得分:0 
顶下

期待和你交流
2006-08-10 11:40
yzwt2004
Rank: 1
等 级:新手上路
帖 子:472
专家分:0
注 册:2006-1-18
得分:0 
没有实际东东,还是理论

想学 .Net 了
2006-08-11 15:33
做人很低调
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:1268
专家分:0
注 册:2006-8-2
得分:0 
楼主对Web很了解啊  
我也有了一定的理解了 谢谢楼主拉

其实我很低调,只是你不知道...
2006-08-11 16:00
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
得分:0 
以下是引用yzwt2004在2006-8-11 15:33:14的发言:
没有实际东东,还是理论

朋友,你想我把全站代码都帖出来吗?


个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2006-08-11 18:42
yzwt2004
Rank: 1
等 级:新手上路
帖 子:472
专家分:0
注 册:2006-1-18
得分:0 
用 Applicatino 还不一样要打开数据库?

当你的Applicatino更新了,你就得打开,没更新还得打开,我是用xmlhttp的,感觉还是在不停的打开数据库;当Applicatino没有更新时,打开原来的,有更新了,就打开原来加更新的,

有没有什么办法让原来的数据,放到什么东东里装着,Applicatino没有更新就调用那个东东里的原来信息,

楼上,你是怎么实现的,说说....呵呵

想学 .Net 了
2006-11-28 10:37
神州游侠
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-5-20
得分:0 
收集中。。。呵呵。

2007-01-02 00:49
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
得分:0 
以下是引用yzwt2004在2006-11-28 10:37:28的发言:
用 Applicatino 还不一样要打开数据库?

当你的Applicatino更新了,你就得打开,没更新还得打开,我是用xmlhttp的,感觉还是在不停的打开数据库;当Applicatino没有更新时,打开原来的,有更新了,就打开原来加更新的,

有没有什么办法让原来的数据,放到什么东东里装着,Applicatino没有更新就调用那个东东里的原来信息,

楼上,你是怎么实现的,说说....呵呵

数据库是必须的,或者可以用xml
即使用ajax技术,仍旧需要数据源,而大数据量的数据一般来说只能用数据库
用我顶楼所说的方法,是极大限度的减少直接访问数据库的次数(当聊天的人很多的时候,确实基本上没什么差别),而不是说避免去访问数据库。


个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2007-01-02 11:11
lq7350684
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5089
专家分:98
注 册:2006-11-6
得分:0 
说的都是些思想,不过我还是有点不懂.有点迷糊.
2007-01-04 16:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-83112-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.272669 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved