请教几个编写聊天室时遇到的问题?

l_cheng 2002-02-17 03:27:29
我在编写一个聊天室,教师列表部分和聊天记录部分的两个页面设为5秒刷新一次,但这导致浏览器页面频繁滚动,界面十分不友好。我看过网易的聊天室,他用户列表页面的刷新并不是定时的,而是在有新用户加入时才刷新的;另外,网易的聊天室的聊天记录页面的刷新很奇怪,它好像是将全部信息向上滚动一行,然后再添加新的信息,请问各位,这些如何实现???
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ping16 2002-02-22
  • 打赏
  • 举报
回复
无刷新技术聊天室用纯asp不太容易实现,网易的并不是采用刷新而是push,即当有新消息被服务端接收到后,服务端并不须要的客户端的请求,而是以push的方式发送给客户端。
听起来可能难以实现,实际上其中只有一个关键问题。它是如何阻塞当前执行的asp。网易的那张显示消息的网页是永远不会下载完的,它始终保持正在打开状态。我没有看过它的原码,我猜想其中包含一个无限循环,用它来读取一个消息队列(被发送到服务端的新消息都被放入此队列),然后push给客户端。当然如果你直接在asp中使用无限循环肯定会死机,这就是为什么要阻塞当前执行的asp的原因。关于如何自动滚动到尾部,你可以看一下网易的js文件,它做一个函数来实现自己找找吧。
jmcity 2002-02-18
  • 打赏
  • 举报
回复
有用户进入聊天室刷新时可以用js来触发
没有用户进入时,在线列表可以不刷新,
当有用户时入,马上触发刷新在线的名单的动作即可解决!
使用数据也有一个坏处,即人多时,如果有100个人聊天,都在读数据库,那可不是我们希望看到的!
我还是认为将发言内容做成一个数组
然后将这个数组用application来保存,这样只是使用了服务器的内存,而没有形成对服务器硬盘的访问!还是效率要高好多,当然数组存多少对话,和数组定为多大,自己要好好把握,存得太多,内存开销过大,存得太少,又容易丢话
l_cheng 2002-02-18
  • 打赏
  • 举报
回复
请问,如何在页面刷新时,页面自动滚动到尾部,显示最新的内容
ChinaOk 2002-02-17
  • 打赏
  • 举报
回复
你可以下了几个聊天室代码看看。
这要求你要有点js的功底才能搞的好点。
  • 打赏
  • 举报
回复
关于第一个问题我有点办法,就是每隔多长时间检查一次有无新用户登录,有的话刷新,没有就不刷新
希偌 2002-02-17
  • 打赏
  • 举报
回复
数据库聊天室的“无刷新”技术要点

聊天室是网络实时交互的最常应用之一。聊天室的制作要解决好以下问题。
1、谁在发言
2、讲给谁听
3、讲些什么
  与ICQ不同,ICQ
的数据流是一对一的关系。只要解决好上面三个问题就可以实现。聊天室由于存在一对多、多对一、一对一等多种数据关系,因此就有一个数据的存放问题。
  ASP 聊天室的数据存放一般有三种形式: 一是用全局变量Application
和Session对象。这种形式速度快效果好,但系统资源消耗太大。二是应用读写数据库实现。这种方法简明但服务器频繁读写数据据库很累。第三种可用读写TXT文件完成。适合简单的聊天室。三种方法都有一个共性的特点:客户端要获取新的聊天数据,必需刷新调用。刷新时间过短,屏幕晃动厉害,刷新时间过长,等待时间太多感速度太慢。于是人们分别用触发刷新与自动刷新结合从感觉上得到改善。二是利用隐藏帧进行刷新再把内容加在显示帧上,形成所谓“无刷新”聊天室,解决了屏幕晃动问题。
  “无刷新”聊天室要解决的技术问题有:
一、如何判断新数据
二、新数据的提取
三、如何让客户断在有新数据时能及时更新
  以上一、二用Application很容易实现,但第三个问题不容易解决。用数据库做聊天室,第三个问题相对容易,但第一、二个问题要费点精神。笔者用数据库做的聊天室采用了“无刷新”技术,没有用一个Application,主要的技术要点是:

  在数据库中另设置只有一个字段的表,字段名:BS,用户每次登陆读一次BS 的值。 设一个Session别作为每一个具体用户的当前发言次数,初始为
BS-1。用户每发言一次使 BS + 1(Session 值不此时不加,形成Session与BS差)在隐性刷新帧上判断: 如果 BS 与
Session 有差,则读数据库将新数据读出并在显示帧显示。Session+1
表示新数据已经读出,不再重读。反复此过程,直到所有新数据据读出并显示。此时 BS = Session上述方法解决了上面讲的
判断新数据和新数据的提取的问题。由于新数据本身没有任何变化,依然原样存放在数据库中,客户端无论时间差多大,只要自身的Session与BS有差,一当读库,差多少多多少条记录,解决了客户端刷新差异带来的不显示问题。

  以上方法,当然也可以用Application来设置 BS。还有一但BS 到了一定值时(看同时发言人数而定),要重置为 1 。以上方法在 IIS
4 平台,局域网、因特网通过。
neweb 2002-02-17
  • 打赏
  • 举报
回复
网易好象有专门的聊天服务器,一般的ASP做不到的,

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧