.net教程:用asp.net创建基于ajax的聊天室程序
[size=3]原作者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中。
hashtable users;
stringcollection chat;
在global.asax.cs 中声明一个全局的chatengine的实例,为chat room中所有users共用:
public static uchat.chatengine.ichatengine engine = new uchat.chatengine.chatengine();
还有一个javascript timer函数用来同步全局变量和页面信息。
function settimers()
{
timeid = window.settimeout( "updateall()", refreshrate );
}
每一个user都由一个username和一个guid来唯一标识。
public void adduser(string id, string user)
{
//make sure user name does not exist already
if( !userexists( user ) )
{
//add user to users list
users.add( id, user );
//display a notification message to all users
chat.add( this.makeservermessage(string.format(
joinedfmt, user ) ));
}
}
程序运行界面
开始页面显示一些有关当前session的基本信息,比如user number、聊天记录的大小等。用户必须提供用户名才能进入聊天室。点击login button进入下面的函数:
protected void login( object sender, eventargs e )
{
string user = txtusername.text;
if( !validatenick( user ) ) return;
if( global.engine.userexists( user ) )
{
lblerrormsg.text = "a user with this " +
"name already exists, try again.";
return;
}
response.redirect( "server.aspx?action=login&u=" + user );
}
经过一些简单验证后,通过adduser函数将用户加到user lists,然后就进入了聊天室页面chat.aspx,这时下面的javascript函数就会被执行:
<script type="text/javascript">
sniffbrowsertype();
//shows loading.. screen
showloadscreen();
//set the javascript timer and
//loads user list and messages
settimers();
setfocus('mytext');
</script>
当用户键入一些信息并回车时,就会调用下面的函数:
<input type="text" class="mytext"
id="mytext" onkeydown="capturereturn(event)">
// capture the enter key on the input box and post message
function capturereturn( event )
{
if(event.which || event.keycode)
{
if ((event.which == 13) || (event.keycode == 13))
{
posttext();
return false;
}
else {
return true;
}
}
}
function posttext()
{
rnd++;
//clear text box first
chatbox = getelement( "mytext" );
chat = chatbox.value;
chatbox.value = "";
//get user guid from url
userid = location.search.substring( 1, location.search.length );
//construct ajax server url
url = 'server.aspx?action=postmsg&u=' + userid + '&t=' +
encodeuricomponent(chat) + '&session=' + rnd;
//create and set the instance
//of appropriate xmlhttp request object
req = getajax();
//update page with new message
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
[/size]
页:
[1]