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

简介:
原作者Dahan Abdo
译自CodeProject 

如要下载源代码,请到我的网站,地址: http://www.vczx.com/article/show.php?id=1796

简 介

  我的第一个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并不需要用户安装任何软件就可以运行的聊天室程序,并且很容易维护。





   本文转自loose_went博客园博客,原文链接:http://www.cnblogs.com/michaelxu/archive/2006/12/19/596872.html,如需转载请自行联系原作者



相关文章
|
1月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
49 0
|
2月前
|
Ubuntu 持续交付 API
如何使用 dotnet pack 打包 .NET 跨平台程序集?
`dotnet pack` 是 .NET Core 的 NuGet 包打包工具,用于将代码打包成 NuGet 包。通过命令 `dotnet pack` 可生成 `.nupkg` 文件。使用 `--include-symbols` 和 `--include-source` 选项可分别创建包含调试符号和源文件的包。默认情况下,`dotnet pack` 会先构建项目,可通过 `--no-build` 跳过构建。此外,还可以使用 `--output` 指定输出目录、`-c` 设置配置等。示例展示了创建类库项目并打包的过程。更多详情及命令选项,请参考官方文档。
187 11
|
2月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
2月前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
4月前
|
Linux C# iOS开发
如何用 WinDbg 调试Linux上的 .NET程序
【7月更文挑战第13天】 1. `dotnet-dump`: Collects process dumps with `dotnet-dump collect -p &lt;process_id&gt;`. 2. `lldb`: Debugs Mono runtime apps on macOS/Linux. 3. **Visual Studio Code**: Remotely debugs .NET via the C# extension. 4. **JetBrains Rider**: Supports remote debugging of .NET on Linux.
|
3月前
|
开发框架 NoSQL .NET
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
|
3月前
|
Web App开发 数据采集 开发框架
在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧
在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧
|
5月前
|
存储 安全 C#
技术心得记录:强命名的延迟与关联在.net程序集保护中的作用及其逆向方法
技术心得记录:强命名的延迟与关联在.net程序集保护中的作用及其逆向方法
|
5月前
|
开发框架 前端开发 JavaScript
程序与技术分享:ASP.NET发展史(【译】)
程序与技术分享:ASP.NET发展史(【译】)
49 0

相关实验场景

更多