一步一步打造WebIM 1

2021-09-05 23:34:07 字數 3305 閱讀 2923

webim系列文章

1.comet

在.net要實現comet就要用到ihttpasynchandler,在開始閱讀文章前,建議先了解一下ihttpasynchandler。

2.lesktop

lesktop是一款用於開發ria**的開源js介面庫,lesktop提供了乙個功能強大的視覺化開發工具幫助您快速的開發ria**。這個系列介紹的webim的前台ui將使用lesktop來開發。

接下來,將開始今天的主題,開發乙個簡單的webim,這個webim將使用comet技術,從而避免在客戶端和服務端輪詢,提高webim的效能(目前主要實現能夠聊天,其他功能會在以後不斷完善)。客戶端介面在這就不詳細介紹了,用lesktop拖拖控制項就可以了,效果如下:

1.基本思路

comet便是指伺服器推技術。它的實現方式是在瀏覽器與伺服器之間建立乙個長連線,待獲得訊息之後立即返回。否則持續等待,直至超時。客戶端得到訊息或超時之後,又會立即建立另乙個長連線。comet技術的最大優勢,自然就是很高的即使性。在.net中實現這種方式並不困難,用ihttpasynchandler即可。

接收訊息的流程:

傳送訊息流程:

傳送訊息和新增***將由乙個型別為messagemanagement物件來負責,

新增*****如下:

/// /// 

新增訊息***,如果查詢到符合***條件的訊息,返回false,此時不會新增***

///

如果沒有查詢到符合***條件的訊息,返回true,此時***將被新增到m_listeners中

///

public bool addlistener(string receiver, string sender, nullable

from, webim_asyncresult asynresult)

list

listeners = m_listeners[receiver] as

list

;//查詢訊息

list

messages = find(receiver, sender, from);

if (messages.count == 0)

else

return messages.count == 0;}}

傳送訊息**如下:

/// /// 

插入新的訊息,插入訊息後將查詢m_listeners中是否有符合條件的***,如存在,同時將訊息傳送出去

///

public

message newmessage(string receiver, string sender, datetime createdtime, string content)

}foreach (messagelistener listener in removelisteners)

}return message;}}

2.使用ihttpasynchandler實現cometihttpasynchandler的介紹可以查閱下msdn,以下是接收訊息的源**,主要是重寫beginprocessrequest和endprocessrequest:

}3.客戶端接收訊息客戶端接收訊息並不複雜,只需要傳送請求,返回後在傳送另乙個請求即可,**如下:

function receive()

; function receive_error(ex)

}function receive_callback(xml, text)

if (ret.messages.length > 0)

//傳送下乙個請求

settimeout(receive, 50);

}system.post(receive_callback, receive_error, "recevie.aspx", system.renderjson(data));

}

webim源**

(注意:開發時起始頁為webim_dev.htm,直接開啟起始頁為webim.htm)

乙個簡單的webim就先介紹到這裡,如果您有任何問題,可以通過webim與我聯絡。

一步一步打造WebIM 2 訊息快取

盧春城專欄 在 一步一步打造webim 1 一文中,已經介紹了如何實現乙個簡單的webim,但是,這個webim有乙個問題,就是每一次新增訊息 時,都必須訪問一次資料庫去查詢是否有訊息,顯然,如果使用者比較多時,必然對資料庫的壓力比較大。解決這個問題的乙個方法就是先將訊息快取在記憶體中,不立即寫入資...

一步一步打造WebIM 2 訊息快取

webim系列文章 在一步一步打造webim 1 一文中,已經介紹了如何實現乙個簡單的webim,但是,這個webim有乙個問題,就是每一次新增訊息 時,都必須訪問一次資料庫去查詢是否有訊息,顯然,如果使用者比較多時,必然對資料庫的壓力比較大。解決這個問題的乙個方法就是先將訊息快取在記憶體中,不立即...

一步一步打造WebIM 3 效能測試

webim系列文章 在一步一步打造webim 1 和 2 中,已經討論了如何開發乙個webim,並且使用快取來提高webim的效能,本文將編寫乙個程式模擬大量使用者登入來對webim進行效能測試。測試一將模擬200個使用者同時登入的聊天室,每個使用者以1條訊息 秒的速度傳送訊息 由於網路和伺服器處理...