小六聊聊-聊天工具的實現原理

前言

聊天工具和咱們的平常生活愈來愈密不可分,看着 騰訊大佬的兩款工具 QQ,We Chat 獨步江湖, 小馬哥 每天在家無聊的數錢玩nginx

小六前幾天在某個地方採藥,不當心掉入了一個山洞中,昏迷後醒來 發現石壁上刻着九陽神功 其中有一章專門講如何製做聊天工具的git

C/S模式

C-S 模式 Client-Server 模式 也叫 客戶端-服務器模式 客戶端和服務器之間約定好各類協議,客戶端輸入指令 服務器返回計算結果github

TCP/UDP 協議

TCP 百度百科服務器

UDP 百度百科網絡

OS

  1. OS 上一切皆文件 不管從硬盤仍是從網絡上寫入讀取 OS都將給他一個文件描述符
  2. 文件描述符由內核統一管理 讀取寫入信息必須通過內核 所以空間須要有一塊可以存放信息的空間
  3. 信息最終要交給應用程序 所以內核進程 和 用戶進程之間還存在一次IO
  4. 至此將網絡信息存放到了用戶的用戶進程空間,用戶可使用

基礎介紹完畢,如何搭建本身的聊天的工具併發

聊天工具

通過前面的介紹 目前客戶端和服務器之間呈現如圖所示的一種狀況 而兩個客戶端是沒法直接通訊的 客戶端不在公網上工具

可是 服務器在公網上 IP PORT 都是固定的 客戶端上的應用能夠在任何地方連接到服務器 給服務器發送信息post

基於上面客戶端能夠隨時連接到服務器(C/S結構)3d

服務器上有和各個客戶端鏈接的文件描述符(OS->fd)code

所以客戶端選擇服務器上的其餘fd 併發送信息給服務器

服務器接收到信息後根據客戶端選擇的 fd 將信息轉發到對應的客戶端 完成了用戶A 和用戶B 之間的通訊


過往文章

  1. 小六聊聊-聊天工具的實現原理
  2. 小六聊聊-對戰平臺的實現原理
  3. 小六聊聊-nginx的實現原理

本身動手寫聊天工具

mini聊天工具代碼地址


羣組聊天

Q: 如何實現羣組聊天

A: 無非多選擇幾個fd

相關文章
相關標籤/搜索