天天看點

C/S+P2P網絡模型(一)--聊天

從今天開始我們來實作一個C/S+P2P網絡模型,主要功能包括:聊天和傳輸檔案。

聊天分群聊和私聊,雖然不是真的像QQ那樣有個QQ群,但是這樣類比容易了解,在後面我們會仔細說明。

前面我寫過一篇文章講過多點傳播,我們就用多點傳播來實作p2p網絡模型。首先而且是最關鍵的一點是:每一個程式執行個體都對應一個peer結點。接下來我們先來解釋整個程式代碼架構,再分聊天和傳輸檔案詳細說明。

我們先看整個程式架構。

整個程式架構主要包括兩個子產品和一些實體類。

網絡子產品:實作兩個網絡模型,一個是C/S,另一個是P2P。

消息子產品:網絡消息所使用的消息類。

實體類:包括結點類和管理類等。

下面我們看聊天怎麼實作。

1.要實作聊天,首先使用者要登入。登入主要用到C/S模型,我們使用一個伺服器,使用者登入時将使用者資訊發送給伺服器,伺服器驗證使用者資訊并給使用者回發确認消息,同時記錄每一個登入的使用者,在使用者發出擷取目前線上使用者清單的請求時傳回該清單。

2.聊天分群聊和私聊。聊天需要用到P2P模型,不需要跟伺服器打交道,直接将聊天消息發往各個使用者,當然在擷取目前線上使用者清單的時候還是要請求伺服器的。

    ①預設情況下是群聊,我們可以采用多點傳播的方式實作。

    ②私聊要經過下面幾個步驟:

擷取線上使用者清單。往伺服器發送請求,由伺服器将清單資訊傳回。

選中一個使用者,将接收方加入消息頭後進行多點傳播。在這裡我使用名字唯一來辨別,是以可以根據名字來唯一确定使用者。

          iii. 關鍵在這裡,在接收多點傳播消息後,首先解析消息類型,假設是PrivateMessage,如果發現消息中的接收方是自己就接收處理,否則就抛棄。

為了盡量減少代碼量,好讓大家容易了解,我沒有使用界面。

由于代碼檔案比較多,需要的可以在​​這裡​​下載下傳。

上面隻是實作了聊天功能,​​下一篇文章​​将會實作檔案傳輸功能。

從今天開始我們來實作一個C/S+P2P網絡模型,主要功能包括:聊天和傳輸檔案。

聊天分群聊和私聊,雖然不是真的像QQ那樣有個QQ群,但是這樣類比容易了解,在後面我們會仔細說明。

前面我寫過一篇文章講過多點傳播,我們就用多點傳播來實作p2p網絡模型。首先而且是最關鍵的一點是:每一個程式執行個體都對應一個peer結點。接下來我們先來解釋整個程式代碼架構,再分聊天和傳輸檔案詳細說明。

我們先看整個程式架構。

整個程式架構主要包括兩個子產品和一些實體類。

網絡子產品:實作兩個網絡模型,一個是C/S,另一個是P2P。

消息子產品:網絡消息所使用的消息類。

實體類:包括結點類和管理類等。

下面我們看聊天怎麼實作。

1.要實作聊天,首先使用者要登入。登入主要用到C/S模型,我們使用一個伺服器,使用者登入時将使用者資訊發送給伺服器,伺服器驗證使用者資訊并給使用者回發确認消息,同時記錄每一個登入的使用者,在使用者發出擷取目前線上使用者清單的請求時傳回該清單。

2.聊天分群聊和私聊。聊天需要用到P2P模型,不需要跟伺服器打交道,直接将聊天消息發往各個使用者,當然在擷取目前線上使用者清單的時候還是要請求伺服器的。

    ①預設情況下是群聊,我們可以采用多點傳播的方式實作。

    ②私聊要經過下面幾個步驟:

擷取線上使用者清單。往伺服器發送請求,由伺服器将清單資訊傳回。

選中一個使用者,将接收方加入消息頭後進行多點傳播。在這裡我使用名字唯一來辨別,是以可以根據名字來唯一确定使用者。

          iii. 關鍵在這裡,在接收多點傳播消息後,首先解析消息類型,假設是PrivateMessage,如果發現消息中的接收方是自己就接收處理,否則就抛棄。

繼續閱讀