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

前言

聊天工具和咱们的平常生活愈来愈密不可分,看着 腾讯大佬的两款工具 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

相关文章
相关标签/搜索