原作者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中。
在Global.asax.cs 中聲明一個全局的ChatEngine的實例,為chat room中所有users共用:
還有一個JavaScript timer函數用來同步全局變量和頁面信息。
每一個user都由一個username和一個GUID來唯一標識。
程序運行界面
開始頁面顯示一些有關當前session的基本信息,比如user number、聊天記錄的大小等。用戶必須提供用戶名才能進入聊天室。點擊Login button進入下面的函數:
經過一些簡單驗證后,通過AddUser函數將用戶加到user lists,然后就進入了聊天室頁面chat.aspx,這時下面的JavaScript函數就會被執行:
當用戶鍵入一些信息并回車時,就會調用下面的函數:
譯自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;
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);
}
{
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)));
}
}
{
// 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);
}
{
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 >
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 );
}
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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
