用Asp.Net创建基于Ajax的聊天室程序

系统 1750 0
原作者Dahan Abdo
译自CodeProject

如要下载源代码,请到原文地址:http://www.codeproject.com/Ajax/UChat.asp

简 介

我的第一个chat room 是用ASP 3.0写的。 程序比较简单,两个text box, 用来处理页面上每秒刷新的信息。那时候,要想建一个真正的chat room,要用到Java Applet 或者 ActiveX control。基于HTTP的chart rooms都面临着一些跟我第一个chat room一样的问题。这些问题包括页面刷新导致的屏幕闪烁现象。但这个问题已经被AJAX解决了。 AJAX是JavaScript和 XML异步调用的结合。现在在server端用一些JavaScript代码就可以实现一个真正的chat room了。这篇文章不会介绍Ajax,并假设你已经对Ajax和ASP.NET的运用有一定了解。只是介绍如何用Ajax技术来创建一个基本的chat room。

例 程

这是一个多用户的单一chat room。可以实现基本的聊天功能,还支持一些命令行如: /admin clear 用来清除聊天记录,/nick [Name] 用来更改用户昵称等。程序说明这个程序用一个ChatEngine类来处理所有的聊天信息和用户信息,用户信息存储在一个Hashtable中,聊天信息存储在StringCollection中。

Hashtableusers;
StringCollectionchat;

在Global.asax.cs 中声明一个全局的ChatEngine的实例,为chat room中所有users共用:

public static UChat.ChatEngine.IChatEngineEngine = new UChat.ChatEngine.ChatEngine();

还有一个JavaScript timer函数用来同步全局变量和页面信息。


functionsetTimers()
{
timeID
= window.setTimeout( " updateAll() " ,refreshRate);
}

每一个user都由一个username和一个GUID来唯一标识。

public void AddUser( string id, string user)
{
// makesureusernamedoesnotexistalready
if ( ! UserExists(user))
{
// addusertouserslist
users.Add(id,user);

// displayanotificationmessagetoallusers
chat.Add( this .MakeServerMessage( string .Format(
joinedfmt,user)));
}

}


程序运行界面



开始页面显示一些有关当前session的基本信息,比如user number、聊天记录的大小等。用户必须提供用户名才能进入聊天室。点击Login button进入下面的函数:

protected void Login( object sender,EventArgse)
{
string user = txtUsername.Text;

if ( ! ValidateNick(user)) return ;

if (Global.Engine.UserExists(user))
{
lblErrorMsg.Text
= " Auserwiththis " +
" namealreadyexists,tryagain. " ;
return ;
}

Response.Redirect(
" Server.aspx?action=Login&u= " + user);
}

经过一些简单验证后,通过AddUser函数将用户加到user lists,然后就进入了聊天室页面chat.aspx,这时下面的JavaScript函数就会被执行:



< scripttype = " text/javascript " >
sniffBrowserType();
// Showsloading..screen
showLoadScreen();
// Setthejavascripttimerand
// loadsuserlistandmessages
setTimers();
setFocus(
' mytext ' );
</ script >

当用户键入一些信息并回车时,就会调用下面的函数:

< inputtype = " text " class = " mytext "
id
= " mytext " onkeydown = " captureReturn(event) " >

// Capturetheenterkeyontheinputboxandpostmessage
functioncaptureReturn( event )
{
if ( event .which || event .keyCode)
{
if (( event .which == 13 ) || ( event .keyCode == 13 ))
{
postText();
return false ;
}

else {
return true ;
}

}

}

functionpostText()
{
rnd
++ ;
// Cleartextboxfirst
chatbox = getElement( " mytext " );
chat
= chatbox.value;
chatbox.value
= "" ;

// getuserGUIDfromurl
userid = location.search.substring( 1 ,location.search.length);

// constructAjaxServerURL
url = ' Server.aspx?action=PostMsg&u= ' + userid + ' &t= ' +
encodeURIComponent(chat)
+ ' &session= ' + rnd;

// Createandsettheinstance
// ofappropriateXMLHTTPRequestobject
req = getAjax();

// Updatepagewithnewmessage
req.onreadystatechange = function() {

if (req.readyState == 4 && req.status == 200 ) {
updateAll();
}

}


req.open(
' GET ' ,url, true );
req.send(
null );
}


就这么多,没什么特别的,你可以看源代码,里面有很多注释信息。

结 论

要用Java Applet建一个chat room需要在用户的机器上安装JVM。用ActiveX control存在一些安全问题。而用刚才介绍的AJAX,你却可以轻而易举的创建一个基于HTTP并不需要用户安装任何软件就可以运行的聊天室程序,并且很容易维护。

http://www.cnblogs.com/michaelxu/archive/2006/12/19/596872.html

用Asp.Net创建基于Ajax的聊天室程序


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论