用Asp.Net創(chuàng)建基于Ajax的聊天室程序原作者Dahan Abdo
譯自CodeProject 如要下載源代碼,請到我的網(wǎng)站,地址:http://www./article/show.php?id=1796 簡 介 我的第一個chat room 是用ASP 3.0寫的。 程序比較簡單,兩個text box, 用來處理頁面上每秒刷新的信息。那時候,要想建一個真正的chat room,要用到Java Applet 或者 ActiveX control?;贖TTP的chart rooms都面臨著一些跟我第一個chat room一樣的問題。這些問題包括頁面刷新導(dǎo)致的屏幕閃爍現(xiàn)象。但這個問題已經(jīng)被AJAX解決了。 AJAX是JavaScript和 XML異步調(diào)用的結(jié)合?,F(xiàn)在在server端用一些JavaScript代碼就可以實現(xiàn)一個真正的chat room了。這篇文章不會介紹Ajax,并假設(shè)你已經(jīng)對Ajax和ASP.NET的運用有一定了解。只是介紹如何用Ajax技術(shù)來創(chuàng)建一個基本的chat room。 例 程 這是一個多用戶的單一chat room??梢詫崿F(xiàn)基本的聊天功能,還支持一些命令行如: /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函數(shù)用來同步全局變量和頁面信息。 function setTimers() { timeID = window.setTimeout( "updateAll()", refreshRate ); }每一個user都由一個username和一個GUID來唯一標(biāo)識。 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 ) )); } }![]() 程序運行界面 ![]() 開始頁面顯示一些有關(guān)當(dāng)前session的基本信息,比如user number、聊天記錄的大小等。用戶必須提供用戶名才能進(jìn)入聊天室。點擊Login button進(jìn)入下面的函數(shù): 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 ); }經(jīng)過一些簡單驗證后,通過AddUser函數(shù)將用戶加到user lists,然后就進(jìn)入了聊天室頁面chat.aspx,這時下面的JavaScript函數(shù)就會被執(zhí)行: ![]() <script type="text/javascript"> sniffBrowserType(); //Shows loading.. screen showLoadScreen(); //Set the javascript timer and //loads user list and messages setTimers(); setFocus('mytext'); </script>當(dāng)用戶鍵入一些信息并回車時,就會調(diào)用下面的函數(shù): <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 ); }就這么多,沒什么特別的,你可以看源代碼,里面有很多注釋信息。 結(jié) 論 要用Java Applet建一個chat room需要在用戶的機(jī)器上安裝JVM。用ActiveX control存在一些安全問題。而用剛才介紹的AJAX,你卻可以輕而易舉的創(chuàng)建一個基于HTTP并不需要用戶安裝任何軟件就可以運行的聊天室程序,并且很容易維護(hù)。 分類: 01 ASP.NET/AJAX |
|
|