小六聊聊-聊天工具的实现原理

3,157 阅读2分钟

前言

聊天工具和我们的日常生活越来越密不可分,看着 腾讯大佬的两款工具 QQ,We Chat 独步江湖, 小马哥 天天在家无聊的数钱玩

小六前几天在某个地方采药,不小心掉入了一个山洞中,昏迷后醒来 发现石壁上刻着九阳神功 其中有一章专门讲如何制作聊天工具的

C/S模式

C-S 模式 Client-Server 模式 也叫 客户端-服务器模式 客户端和服务器之间约定好各种协议,客户端输入指令 服务器返回计算结果

TCP/UDP 协议

TCP 百度百科

UDP 百度百科

OS

  1. OS 上一切皆文件 无论从硬盘还是从网络上写入读取 OS都将给他一个文件描述符
  2. 文件描述符由内核统一管理 读取写入信息必须经过内核 因此空间需要有一块能够存放信息的空间
  3. 信息最终要交给应用程序 因此内核进程 和 用户进程之间还存在一次IO
  4. 至此将网络信息存放到了用户的用户进程空间,用户可以使用

基础介绍完毕,如何搭建自己的聊天的工具

聊天工具

经过前面的介绍 目前客户端和服务器之间呈现如图所示的一种情况 而两个客户端是无法直接通信的 客户端不在公网上

但是 服务器在公网上 IP PORT 都是固定的 客户端上的应用可以在任何地方链接到服务器 给服务器发送信息

基于上面客户端可以随时链接到服务器(C/S结构)

服务器上有和各个客户端连接的文件描述符(OS->fd)

因此客户端选择服务器上的其他fd 并发送信息给服务器

服务器接收到信息后根据客户端选择的 fd 将信息转发到对应的客户端 完成了用户A 和用户B 之间的通信


过往文章

  1. 小六聊聊-聊天工具的实现原理
  2. 小六聊聊-对战平台的实现原理
  3. 小六聊聊-nginx的实现原理

自己动手写聊天工具

mini聊天工具代码地址


群组聊天

Q: 如何实现群组聊天

A: 无非多选择几个fd