卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

如何設計一個簡單的聊天APP

1. 服務端設計思路 服務端主要實現(xiàn)以下功能: 處理客戶端登錄請求 處理客戶端設置請求(更改密碼、設置昵稱、設置留言等) 處理客戶端發(fā)送信息請求(文字、圖片、表情等) 處

1. 服務端設計思路

服務端主要實現(xiàn)以下功能:

  1. 處理客戶端登錄請求
  2. 處理客戶端設置請求(更改密碼、設置昵稱、設置留言等)
  3. 處理客戶端發(fā)送信息請求(文字、圖片、表情等)
  4. 處理客戶端發(fā)送文件請求(包括發(fā)送離線文件請求)
  5. 處理客戶端聊天記錄下載請求
  6. 處理客戶端查詢用戶列表、添加好友等請求

上述功能圍繞著網(wǎng)絡通信和數(shù)據(jù)庫維護展開。任務處理邏輯如下:

  • 使用Windows完成端口線程池技術實現(xiàn)網(wǎng)絡通信,可以使用現(xiàn)有的網(wǎng)絡庫。當新的請求報文到達時,實例化對應的任務類,并投遞到一個任務隊列中。
  • 任務隊列使用信號量內核對象來維護,當有新的任務時,從線程池中激活一個線程去執(zhí)行該任務。

具體業(yè)務邏輯細節(jié)如下:

  1. 當客戶端接入但超過n分鐘未登錄時,服務端會主動斷開該客戶端的連接,以節(jié)約資源。
  2. 客戶端登錄時,在數(shù)據(jù)庫中記錄該用戶的IP地址和端口號,并標記為已登錄狀態(tài)。已登錄的客戶端不允許重復登錄。當客戶端注銷、主動掛斷或被動掛斷等事件發(fā)生時,清除該用戶的登錄狀態(tài)。
  3. 客戶端發(fā)送消息傳送請求時,服務端先判斷目標用戶是否在線。如果在線,直接將消息轉發(fā)到目標用戶所在的客戶端IP/端口;否則,將消息存入數(shù)據(jù)庫,在目標用戶登錄時進行推送。
  4. 客戶端發(fā)送文件請求時,如果雙方均在線,則服務器協(xié)調雙方客戶端進行直連。如果直連成功,發(fā)送方直接向接收方發(fā)送文件,服務端不介入數(shù)據(jù)轉發(fā)。如果直連不成功或接收方不在線,服務器要求客戶端先發(fā)送文件驗證信息,以查詢將要發(fā)送的目標文件。如果服務端已經(jīng)存在相同的文件(文件名、大小和MD5校驗相同),則通知客戶端無需上傳,并在數(shù)據(jù)庫中對已存在的文件引用計數(shù)加1。如果服務端不存在該文件,則通知客戶端發(fā)送文件并進行接收。
  5. 當服務端收到客戶端下載聊天記錄請求時,從數(shù)據(jù)庫中查詢該用戶的聊天記錄,并分頁傳送給客戶端。

2. 客戶端設計思路

任何報文請求都遵循以下步驟:

  1. 發(fā)送請求報文
  2. 等待服務端處理結果
  3. 對結果進行處理
注意:本文章僅討論聊天APP的設計思路,具體實現(xiàn)可以在任意平臺上進行,如Windows、Linux、Android、iOS等。
標簽: