日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

由于多年前開發(fā)了一款聊天軟件,今天朋友給我打電話,說他們公司準備開發(fā)一款內部使用的溝通交流工具,找我咨詢關于即時聊天軟件一些經驗,于是跟他聊了一些關于這方面的東西,所以在這里做個總結。

最簡單的聊天系統(tǒng)

設計一個聊天系統(tǒng)首先想到的設計就是:

淺談聊天系統(tǒng)架構設計

 


淺談聊天系統(tǒng)架構設計

 

A發(fā)消息給B,B發(fā)消息給A,A,B能相互收到對方發(fā)送的消息。我們不考慮在同一個局域網或者UDP穿透等特殊情況的,A,B是網絡上隨意的兩臺設備,所以我們需要通過一臺A,B能同時訪問到的機器做中轉,A發(fā)消息給B的過程是:A, B同時連接Core服務器, A把消息發(fā)送給Core服務器,Core服務器把消息轉發(fā)給B,B發(fā)消息給A的過程是同理,一個簡單的聊天系統(tǒng)就成型了。

可以用的方案

最簡單的聊天系統(tǒng)成型,但是這僅僅是最簡單的系統(tǒng),僅僅是一對一聊天,談不上可以用性,真正可用的系統(tǒng)我們必須解決如下問題:

  1. 保存必要的客戶端信息,提供注冊,登陸,獲取自身用戶信息,增加好友,獲取好友信息等功能。
  2. 大量的用戶同時在線相互發(fā)送消息。
  3. 發(fā)送文字,圖片,語音和視頻。(語音和視頻通話通話我們不在此處說明,以后另文詳說)
  4. 獲取離線消息。
  5. 對移動設備的不在線的消息推送。

為了解決上面的問題,提出了一套新的架構方案,如圖:

淺談聊天系統(tǒng)架構設計

 


淺談聊天系統(tǒng)架構設計

 

圖中節(jié)點A,B,C,D為客戶端,為了圖形容易觀看,僅A畫出了跟服務器的連接線連接了服務器,其他客戶端連接也跟A相同。

架構圖中一共有6個服務器和兩個存儲:http用戶服務器,gate服務器,core服務器,http離線消息服務器,http文件服務器,push服務器和數(shù)據(jù)庫存儲,文件系統(tǒng)存儲。現(xiàn)在來分析這些服務器和存儲的作用:

1, http用戶服務器主要負責三個方面:(1)負責客戶端的注冊,把注冊的用戶信息寫入數(shù)據(jù)庫, (2)用戶登陸時驗證用戶信息的正確性,并返回用戶的個人信息, (3)添加和刪除好友時把信息寫入數(shù)據(jù)庫。所以此服務器跟數(shù)據(jù)庫之間有數(shù)據(jù)的寫入刷新,也有讀取,所以是雙向箭頭。

2,core服務器主要是消息的判別和轉發(fā),core收到消息,判別消息是否正確(從數(shù)據(jù)庫中查看消息來源用戶和目標用戶是否為好友,是否為正確格式的消息,登陸信息是否過期等),返回重新打包成發(fā)送給客戶端接收的消息給gate服務器,讓gate服務器發(fā)送給客戶端。此過程中core服務器還可以做其他操作,例如存儲消息。

3,gate服務器負責客戶端信息的收發(fā)工作,作為core服務器和客戶端之間的橋梁,減少客戶端直接連接core服務器產生的連接管理工作,gate來直接管理客戶端的連接,core只需要負責消息的判別和轉發(fā)。如果gate對客戶端的消息發(fā)送失敗,把消息作為離線消息保存到數(shù)據(jù)庫,如果是移動端要把消息通知給push服務器。

4, push服務器專門接收gate服務器檢測到的移動端不在線的情況下發(fā)送過來消息并把消息推送給客戶端。

5,http離線消息服務器主要功能是獲取客戶端沒有登陸或者移動客戶端App在后臺與gate服務器連接中斷時未即時收到的消息。

6, http文件服務器主要作用是發(fā)送文件語音和視頻文件時用來做文件中轉服務。

現(xiàn)在整理如何通過上述服務器來實現(xiàn)一個正確的聊天流程:

首先我們把消息分為兩類,第一類是普通的文本消息,第二類是語音視頻和文件消息。

普通文本消息的發(fā)送和接收流程,客戶端用http用戶服務器注冊成為用戶,通過http用戶服務器登陸并獲取用戶信息,此時用戶是登陸狀態(tài),連接gate服務器,并發(fā)送消息給好友,gate服務器把消息轉發(fā)給core服務器,core服務器處理消息后把消息轉發(fā)給gate服務器,gate服務器發(fā)送消息給目標機器,發(fā)送成功,消息就發(fā)送完成了。如果gate服務器消息發(fā)送失敗,gate服務器需要把消息作為離線消息保存到數(shù)據(jù)庫,gate服務器再判斷目標機器是移動設備,如果目標是移動設備,gate服務器則把消息傳遞給push服務器,push服務器負責推送消息給目標客戶端。目標客戶端連接http離線消息服務器獲取離線消息。

接下來看語音視頻和文件消息的流程,具體工作方式以客戶端A發(fā)送文件給客戶端B為例,A首先把文件通過HTTP方式上傳到http服務器,文件上傳完成后http服務器保存圖片到文件系統(tǒng),并把文件的全局路徑返回給上傳的客戶端A,客戶端A把返回回來的路徑作為文本消息再發(fā)送給目標客戶端B,目標客戶端B收到文本消息后解析出文件的全局路徑然后下載,這時整個文件傳送過程完成。

由上所述,這個架構滿足了提出來關于聊天系統(tǒng)需要滿足的要求,并解決的了所有提出的問題,所以這是一個可用的聊天系統(tǒng)架構。如果一個小范圍內部使用的系統(tǒng),用戶量和消息量都不大的情況下,可以按照這個架構去實現(xiàn)一個即時聊天(IM)系統(tǒng)。其實微信這種量級的系統(tǒng)抽象出來,結構上也差不了太多,只是中間采用了很多分布式系統(tǒng)來提高處理速度和穩(wěn)定性,下一步我們來做分布式架構的即時聊天(IM)系統(tǒng)。

分享到:
標簽:架構 設計
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定