无刷新聊天室的技术实现

聊天室|刷新|无刷新|聊天室|刷新|无刷新

先简单说明下

服务端

用程序生成需要的 XML 文件

客户端

利用 XMLHTTP 或者 DSO(注意状态) 定时刷新需要的数据

相对来说 DSO 可以映射成 recordset 操作比较简单

以下是我简单写着玩的东西 不是完整部分 而且十分简陋

只是代码片段 但作为技术参考已经足够

需要 MSXML 4.0

服务端 我写了两个构造函数 分别是 聊天内容 聊天用户

<script language="JScript" runat="server">
function SLIGHTBOYChat()
{

this.ID;
this.XMLDOMElement = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")

this.Add = function(Name, Content, Append)
{
var root = this.XMLDOMElement.documentElement;
var newItem = this.XMLDOMElement.createElement("Item");
var newItemName = this.XMLDOMElement.createElement("Name");
var newItemNameValue = this.XMLDOMElement.createCDATASection(Name);
newItemName.appendChild(newItemNameValue)
var newItemContent = this.XMLDOMElement.createElement("Content");
var newItemContentValue = this.XMLDOMElement.createCDATASection(Content);
newItemContent.appendChild(newItemContentValue)
var newItemAppend = this.XMLDOMElement.createElement("Append");
newItemAppend.text = Append;
newItem.appendChild(newItemName);
newItem.appendChild(newItemContent);
newItem.appendChild(newItemAppend);
if ( root.childNodes.length > 10 )
{
root.removeChild(root.firstChild)
}
root.appendChild(newItem)
}
this.Save = function()
{
Application("ChatContent") = this.XMLDOMElement.xml;
}
this.GUID = function(PushGUID)
{
if ( PushGUID.Count > 0 )
{
this.ID = PushGUID;
}
else
{
this.ID = "";
}
}
this.Xml = function()
{
if ( this.ID != "" )
{
var XMLDOMElementString = "<?xml version=\"1.0\" encoding=\"gb2312\"?><Chat>";
var items = Chat.XMLDOMElement.selectNodes("//Item[Append > "+ this.ID +"]")
for (var item = items.nextNode(); item; item = items.nextNode())
{
XMLDOMElementString += item.xml;
}
XMLDOMElementString += "</Chat>";
if ( items.length > 0 )
{
return XMLDOMElementString;
}
else
{
return;
}
}
else
{
return this.XMLDOMElement.xml.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>");
}

}
this.Load = function()
{
if ( Application("ChatContent") == "" | typeof(Application("ChatContent")) == "undefined" )
{
Application("ChatContent") = "<?xml version=\"1.0\" encoding=\"GB2312\"?><Chat><Item><Name>slightboy</Name><Content>欢迎 ^^</Content><Append>"+ new Date().getTime() +"</Append></Item></Chat>";
}
this.XMLDOMElement.loadXML(Application("ChatContent"));

}
this.Empty = function()
{
Application("ChatContent") = "<?xml version=\"1.0\" encoding=\"GB2312\"?><Chat><Item><Name>slightboy</Name><Content>欢迎 ^^</Content><Append>"+ new Date().getTime() +"</Append></Item></Chat>";
}

this.Load();
}

function SLIGHTBOYChatList()
{
this.XMLDOMElement = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")

this.Add = function(Name, Level)
{
var root = this.XMLDOMElement.documentElement;
var newItem = this.XMLDOMElement.createElement("Item");
var newItemName = this.XMLDOMElement.createElement("Name");
var newItemNameValue = this.XMLDOMElement.createCDATASection(Name);
newItemName.appendChild(newItemNameValue)
var newItemLevel = this.XMLDOMElement.createElement("Level");
var newItemLevelValue = this.XMLDOMElement.createCDATASection(Level);
newItemLevel.appendChild(newItemLevelValue)
var newItemAppend = this.XMLDOMElement.createElement("Append");
newItemAppend.text = Append;
newItem.appendChild(newItemName);
newItem.appendChild(newItemLevel);
root.appendChild(newItem)
}
this.Save = function()

时间: 2016-02-05

无刷新聊天室的技术实现的相关文章

无刷新聊天室技术实现方法(ASP相关)

聊天室|刷新|无刷新 无刷新聊天室技术实现方法 一.统一名词 文字框:显示聊天内容的框架页面 输入框:输入聊天信息的框架页面 刷新框:自刷新获取最新聊天信息的框架页面,该页面不直接显示出来 二.如何实现 实现无刷新,就是要在当前文字框聊天内容后面不断的添加新的聊天信息. 实现的方式是"添加新信息",而不是"重新刷新". 三.技术要点 实现像chat.163.com的无闪烁刷新的聊天室要用到的关键代码: 1.自刷新: <meta http-equiv="

浅谈无刷新取得远程数据技术

数据|刷新|无刷新 刷新技术经历了大致几个阶段: 一.在HTML文件头里增加一个键,使该页面在设定的时间后跳转到指定的页面(包括自身); 例如: 二.使用框架然后在JS脚本里定时刷新框架内容. 上面两种方式都会重新加载页面,即刷新,给人的感觉不是很好!于是无刷新技术出现了. 三.是对第二种方式的一种变通. 即将众多框架中的一个长宽设置为0,使其不可见,然后通过脚本定时刷新该隐藏框架内容,再将该框架内容"写"到可浏览的框架里.早期的聊天室大多使用了这种技术. 真正意义上实现无刷新技术的还

聊天室关键技术[用户断线]处理

聊天室 在编聊天室时,处理用户断线是一个刺手的问题,特别是放到免费网站上,如果一味地靠global.asa,什么时候触发session_onend,application_onend,都是一个不确定的数字,在设计时,合理地安排会带来意想不到的好处.那么有什么最简便办法处理用户断线呢?笔者经过试验,有了以下的方法:聊天室用N个application("user" & N)来保存用户名,再用application("TimeBegin")来保存每个用户的登录时间

分页技术原理与实现之无刷新的Ajax分页技术(三)_AJAX相关

紧接着上篇-分页技术原理与实现之Java+Oracle代码实现分页(二) ,本篇继续分析分页技术.上篇讲的是分页技术的代码实现,这篇继续分析一下分页技术的效果控制. 上篇已经用代码简单的实现了一个分页.但是我们都看到,代码中每次通过servlet请求取得结果集后,都会转向到一个jsp页面显示结果,这样每次查询页面都会刷新一下,比如查询出现结果集后要查看第三页,页面就会刷新一下.这样页面给人的效果感觉就会有点不舒服,所以我们希望能够在通过条件查询结果集后无论访问哪一页,页面都不会刷新,而只是结果集

PHP聊天室_WebSocket技术实战

最近在研究聊天室技术,因为我是做php的,肯定想要从php入手,偶的一个聊天室,下载地址: http://pan.baidu.com/s/1dDWsbip 密码:i2qz 正在修行当中,准备以此为基础做一款php的聊天室系统出来,php的东西比较容易看懂,但是我遇到的一个问题是前台文件如何发送信息到后台服务器呢,后来研究发现是用的js 的WebSocket技术,如下是常用js WebSocket 常用操作: var socket = new WebSocket('ws://localhost:8

分页技术原理与实现之无刷新的Ajax分页技术(三)

紧接着上篇-分页技术原理与实现之Java+Oracle代码实现分页(二) ,本篇继续分析分页技术.上篇讲的是分页技术的代码实现,这篇继续分析一下分页技术的效果控制. 上篇已经用代码简单的实现了一个分页.但是我们都看到,代码中每次通过servlet请求取得结果集后,都会转向到一个jsp页面显示结果,这样每次查询页面都会刷新一下,比如查询出现结果集后要查看第三页,页面就会刷新一下.这样页面给人的效果感觉就会有点不舒服,所以我们希望能够在通过条件查询结果集后无论访问哪一页,页面都不会刷新,而只是结果集

数据库聊天室的“无刷新”技术要点

聊天室|数据|数据库|刷新|无刷新 聊天室是网络实时交互的最常应用之一.聊天室的制作要解决好以下问题.1.谁在发言2.讲给谁听3.讲些什么与ICQ不同,ICQ 的数据流是一对一的关系.只要解决好上面三个问题就可以实现.聊天室由于存在一对多.多对一.一对一等多种数据关系,因此就有一个数据的存放问题.ASP 聊天室的数据存放一般有三种形式: 一是用全局变量Application 和Session对象.这种形式速度快效果好,但系统资源消耗太大.二是应用读写数据库实现.这种方法简明但服务器频繁读写数据据

Smarty结合Ajax实现无刷新留言本实例_php实例

看了标题你也许要说,留言本,很基本的东东啊!谁不会啊,还要用Smarty,这不找累吗?别急,我要表达的是一种编程的思想和结构,而不是证明我做的东西多有意义,通过它相信对初学者学习Smarty和ajax有些启发.原本用ajax做的,可惜始终调试不成功,只好用手写JS来弄了,不过不要紧,还是有一定价值的.站点结构大家下了源代码自己看,代码不长,应该不会看烦^_^,听我慢慢道来.     现在都PHP5了OO(面向对象)很流行了都,这里也不错过,首先来看下我们用OO来实现数据库操作和连接:[php]<

ajax聊天室 php

ajax无刷新聊天室这里是用php+ ajax实现聊天室的 数据库结构sql: CREATE TABLE `message` (   `mid` int(20) NOT NULL auto_increment,   `msg` varchar(255) NOT NULL,   `user` varchar(50) NOT NULL,   `time` int(10) NOT NULL,   PRIMARY KEY  (`mid`),   KEY `user` (`user`) ) ENGINE=