1. 程式人生 > >即時通訊實現過程

即時通訊實現過程

即時通訊怎麼實現的 該軟體採用P2P方式,各個客戶端之間直接發訊息進行會話聊天,伺服器在其中只扮演協調者的角色(混合型P2P)。 1.會話流程設計 當一個新使用者通過自己的客戶端登陸系統後,從伺服器獲取當前線上的使用者資訊列表,列表資訊包括了系統中每個使用者的地址。使用者就可以開始獨立工作,自主地向其他使用者傳送訊息,而不經過伺服器。每當有新使用者加入或線上使用者退出時,伺服器都會及時發訊息通知系統中的所有其他使用者,以便它們實時地更新使用者資訊列表。 按照上述思路,設計系統會話流程如下: (1)使用者通過客戶端進入系統,向伺服器發出訊息,請求登陸。 (2)伺服器收到請求後,向客戶端返回應答訊息,表示同意接受該使用者加入,並順帶將自己服務執行緒所在的監聽埠號告訴使用者。 (3)客戶端按照伺服器應答中給出的埠號與伺服器建立穩定的連線。 (4)伺服器通過該連線將當前線上使用者的列表資訊傳給新加入的客戶端。 (5)客戶端獲得了線上使用者列表,就可以獨立自主地與線上的其他使用者通訊了。 (6)當用戶退出系統時要及時地通知伺服器。 2.使用者管理 系統中,無論是伺服器還是客戶端都儲存一份線上使用者列表,客戶端的使用者表在一開始登陸時從伺服器索取獲得。在程式執行的過程中,伺服器負責實時地將系統內使用者的變動情況及時地通知線上的每個成員使用者。 新

使用者登入時,伺服器將使用者表傳給他,同時向系統內每個成員廣播“login”訊息,各成員收到後更新自己的使用者表。 同樣,在有使用者退出系統時,伺服器也會及時地將這一訊息傳給各個使用者,當然這也就要求每個使用者在自己想要退出之前,必須要先告訴伺服器。 3.協議設計 3.1 客戶端與伺服器會話 (1)登陸過程。 客戶端用匿名UDP向伺服器傳送訊息: login,username,localIPEndPoint 訊息內容包括3個欄位,各欄位之間用“,”分隔:“login”表示請求登陸;“username”為使用者名稱;“localIPEndPoint”是客戶端本地地址。 伺服器收到後以匿名UDP返回如下訊息: Accept,port 其中,“Accept”表示伺服器接受了請求;“port”是服務所在埠,服務執行緒在這個埠上監聽可能的客戶連線,該連線使用同步的TCP。 連上伺服器,獲取使用者列表: 客戶端從上一會話的“port”欄位的值服務所在埠,於是向埠發起TCP連線,向伺服器索取線上的使用者列表,伺服器接受連線後將使用者列別傳輸給客戶端。 使用者列表格式如下: username1,IPEndPoint1;username2,IPEndPoint2;.....;end username1,username2.....為使用者名稱,IPEndPoint1,IPEndPoint2....為它們對應的端點。每個使用者的資訊都有個“使用者名稱+端點”組成,使用者資訊之間以“;”隔開,整個使用者列表以“end”結尾。 3.1 伺服器協調管理使用者 (1)新使用者加入通知。 由於系統中已存在的每個使用者都有一份當前使用者表,因此當有新成員加入時,伺服器無需重複給系統中的每個成員再傳送使用者表,只要將新加入成員的資訊告訴系統內的其他使用者,再由他們各自更新自己的使用者表就行了。 伺服器向系統內使用者廣播發送如下訊息: 端點欄位寫為“remoteIPEndPoint”,表示是遠端某個使用者終端登陸了,本地客戶執行緒據此更新使用者列表。其實,在這個過程中,伺服器只是將受到的“login”訊息簡單地轉發而已。 (2)使用者退出。 與新成員加入時一樣,伺服器將使用者退出的訊息直接進行廣播轉發: logout,username,remoteIPEndPoint 其中,“remoteIPEndPoint”為退出系統的
遠端使用者
終端的端點地址。 3.1 使用者終端之間聊天 使用者聊天時,他們各自的客戶端之間是以P2P方式工作的,彼此地位對等,獨立,不與伺服器發生直接聯絡。 4.系統實現 4.1 服務執行緒 系統執行後,先有伺服器啟動服務執行緒,只需單擊“啟動”按鈕即可。 即時聊天軟體可以在兩名或多名使用者之間傳遞即時訊息的網路軟體,大部分的即時聊天軟體都可以顯示聯絡人名單,並能顯示聯絡人是否線上。使用者發出的每一句話都回即時顯示在雙方的螢幕上。