我的第一个 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>