国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

如何設(shè)計(jì)一個簡單的聊天APP

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

1. 服務(wù)端設(shè)計(jì)思路

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

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

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

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

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

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

2. 客戶端設(shè)計(jì)思路

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

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