聊天室的显示问题,高分的哟!

snowhust 2000-07-19 11:13:00
偶最近做了聊天室,是利用每4秒钟从数据库中读取最近50条信息然后写到屏幕上去
但是这样当没有人聊天室也会4秒钟刷新,导致屏幕频繁闪烁,我看了网易和南昌热线的聊天室,他们是当用户有新的数据写入时,就只将新数据写在屏幕上,其他不动,屏幕很稳定,有哪位大侠知道怎么做?
...全文
220 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
subzero 2000-07-20
  • 打赏
  • 举报
回复
JGTM2000说的对
用一个隐藏帧来刷新聊天数据
然后把新的数据用客户端脚本写入显示页
西陆的聊天室是一个好例子
ring 2000-07-20
  • 打赏
  • 举报
回复
用隐藏帧吧
这样子它刷的时候就看不到闪了,把内容用document.write() 或 body.innerHTML+= 写入另外的帧

网易用的方法不是你用的方法,它是建立了一个永久性的连接,而不是http那样下载完一页就close connection,用到了socket编程
TopHead 2000-07-19
  • 打赏
  • 举报
回复
King,能不能详细说一些?最好有一个程序片断:)
King 2000-07-19
  • 打赏
  • 举报
回复
我刚做完,最主要是:
Connection: Keep-Alive

Content-type:multipart/x-mixed-replace
JGTM2000 2000-07-19
  • 打赏
  • 举报
回复
我见过一种方法,把Server.ScriptTimeout的超时值设定的奇大,然后ASP利用循环来不停地向客户端写入最新的聊天记录。这种做法被很多聊天室采用,但是按照Windows DNA的理论,它严重的限制了服务器的可伸缩性,并且比较大的占用系统的各种开销。

我曾经用过一种更好的方法(虽然对浏览器有一定的要求),即利用隐藏帧(或者IFRAME)从服务器ASP获取动态脚本更新主聊天页面。这种做法不仅聊天毫无闪烁,连名单的刷新都不会重新加载页面。大致的方法如下:

聊天页面:
<DIV ID='chatlines'></DIV>
<IFRAME src='getcmd.asp' HEIGHT='0' WIDTH='0'>

getcmd.asp:
newline = businessObj.GetNewLines(UserID);
Response.Write "<script>"
Response.Write "chatlines.InsertAdjacentHTML('beforeend','" & newline & "')"
Response.Write "</script>"

意思就是这样,getcmd.asp生成用于以对象模型形式更新聊天页面的客户端脚本代码,该脚本可以很复杂以支持各种各样的主界面元素更新工作,比如只更新在线人数。
qiuhao 2000-07-19
  • 打赏
  • 举报
回复
shi

28,390

社区成员

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

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