1 IM即时通讯项目框架分析和部署

1. 即时通讯框架分析和部署
2. 登录服务器和消息服务器设计
3. 路由服务器设计
4. 数据库代理服务器设计
5. 文件服务器和docker部署
6. 性能测试和k8s上云发布

1.1 即时通讯应用场景

即时通讯技术应用非常广泛,涉及教育、电商、金融、泛娱乐、生活服务、医疗健康、
政企服务、游戏聊天、在线客服等等行业,以下以部分典型应用作为简介。
(一)教育 (二)电商 (三)金融 (四)泛娱乐
(五)招聘 (六)医疗健康 (七)政企服务 (八)游戏类产品
提供:即时通讯、用户点对点聊天、主播互动、实时弹幕、
实时监控、远程控制、多人互动、位置共享

1.2 即时通讯提供商

容联
融云
环信 http api
网易云信
QQ通讯
详细对比:https://blog.csdn.net/weixin_33739646/article/details/
每天发信息不过 10000 条
大部分场景下自研成本比使用第三方的高
自研的优势:可控

1.3 即时通讯开源项目

C++: teamtalk
Go:GoBelieve goim
Java:openfire

2.1 即时通讯的基本架构

客户端与服务器端进行网络通信、收发消息
连接层为客户端收发消息提供出入口。主
要的任务:保持海量用户连接;解析协议,
对传输内容进行编码;维护session;推送
消息。
核心业务层负责IM系统各项功能的核心逻
辑实现。
数据层负责IM系统相关数据的持久化存储,
包括消息内容、账号信息等。

2.2 IM技术的特点

  1. 实时性 :保证消息实时触达。(轮询与长连接)(消息提示推送,和我们阅读的消
    息是不一样的。)
  2. 可靠性 :保证消息的不丢失和不重复。(ACK 机制)
    TCP 只能保证消息数据链路可靠,不能保证业务可靠。
  3. 一致性 :保证同一条消息在多人、多终端展现顺序的一致性。(消息序号生成器)
  4. 安全性 :保证数据传输安全、数据存储安全、消息内容安全。(HTTPDNS 和TLS)

3 即时通讯分层架构

即时通讯系统常用分层架构
接入层:entry/gate
逻辑层:logic
数据层:data
路由层:route

3.1 即时通讯分层架构-接入层

接入层的作用:
◼ 连接整流
◼ 通信安全
◼ 报文解压缩
◼ 初步防攻击

3.1接入层-连接整流和通信安全


3.1接入层-报文解压缩和初步防攻击


3.2 即时通讯分层架构-逻辑层

1. 用户逻辑 :用户登录、用户退出、用户信息查询、用户更新签
名、用户分组创建等
2. 好友逻辑 :添加好友、删除好友、拉取好友列表、好友添加备
注等
3. 群组逻辑 :创建群、加入群、删除群、删除成员等
4. 消息逻辑 :单聊文字消息、单聊语音消息、群聊文字消息、群
聊语音消息、拉取离线消息等
5. 其他 ,比如文件传输、图片传输等

3.2 逻辑层设计核心-扩展性

  1. 水平扩展各个逻辑模块
  2. 无缝添加新的逻辑服务,比如文件传输

3.3 即时通讯分层架构-数据层

1. 对上游屏蔽存储引擎
2. 对上游屏蔽cache层
3. 对上游提供友好接口

3.3.1 数据层-屏蔽存储引擎

3.3.2 数据层-屏蔽cache层

3.3.3 数据层-提供友好接口

3.3.4 数据层-扩展性

3.4 即时通讯分层架构-路由层

  1. 路由消息:消息投递
  2. 内存存储:用户临时数据,比如用户
    状态信息(在线/离线)

3.4. 1 路由层-路由消息

4 Teamtalk

为什么学习Teamtalk:
◼ CloudTalk 基于Teamtalk进行二次开发
◼ xx公司基于Teamtalk进行二次开发

5 即时通讯项目

  1. Android/iOS/PC:各种客户端。
  2. LoginServer: 主要负责负载均衡的作用,当收到客户端的请求时,分配一个负载最小的
    MsgServer给客户端。
  3. MsgServer: TT的主要服务端,负责维护各个客户端的链接,消息转发等功能。
  4. RouteServer:负责消息路由的功能,当msg_server发现某个用户不在本服务器内,而又有消
    息需要发给他,就会将消息转发给route_server,route_server会将消息发给相应的
    msg_server,由此可知,route_server也维护了一定的用户状态。
  5. DBProxy:在TT中负责了主要的业务逻辑,主要与存储层打交道,提供mysql以及redis的访问
    服务,屏蔽其他服务器与mysql与redis的直接交互。
  6. FileServer:文件服务器,提供客户端之间得文件传输服务,支持在线以及离线文件传输
  7. MsfsServer:图片存储服务器,提供头像,图片传输中的图片存储服务。
  8. PushServer:负责Android、IOS客户端提醒消息的推送,类似微信的锁屏提醒消息。
  9. Webserver:简单的管理功能。

6.1 我们能从中学到什么

  1. 基础组件封装:thread、ringfifo等
  2. Epoll网络库封装(客户端服务端)
  3. HTTP模块封装
  4. HTTP api实战
  5. HTTPs
  6. Wesocket
  7. protobuf实战
  8. json
  9. MySQL连接池
    10.Redis连接池
    11.线程池
    12.数据库实战
    13.小文件存储系统原理
    14.音视频集成到即时通讯
    15.即时通讯技术的原理和实战
    1. 消息单聊(消息id)
    2. 消息群聊(分表的设计)
    3. 消息推送和拉取

6.2 即时通讯重点

实时性
 http
 socket
 websocket

数据库
 数据库表设计
 分表设计
 密码存储方式
 最近会话表
 未读消息如何体现
 聊天消息分表问题

单聊消息发送流程
 怎么保证数据的不丢失
 消息序号在哪里生成
 消息序号生成方式
 消息如何封装
 消息发送时的seq有什么作用
 消息发送后服务器怎么应答?
 接收端收到数据后如何应答
客户端的单聊消息未读计数是怎么实现的
 服务器怎么保留消息未读计数
 客户端的未读消息计数从何而来
 客户端未读消息计数清 0 时向服务器发送了什么,服务器
又是怎么清除未读消息计数
文件传输原理
 文件传输分为在线传输离线传输
 在线传输和离线传输有什么区别
群聊消息
 如何推送群聊
 群消息计数器
 群会话如何更新(每有一个人发送消
息,则其他人都需要更新会话消息)
群成员管理
 如何创建群
 如何删除群
 怎么使用redis管理群成员
MySQL连接池设计
 为什么使用连接池
 连接池设置多大合适?
redis连接池设计
 为什么使用连接池
 连接池设置多大合适?
并发能力
 如何做到百万并发
 如何做到千万并发

7.1 即时通讯项目部署

1.保证redis正常运行;
2.保证mysql正常运行;
3.保证php正常运行;
4.保证nginx正常运行;
5.保证php正常运行,这里的php主要是web管理平台的使用;
6.protobuf版本库目前server端是2.0的版本,Android_av使用了3.0的版
本
7.web服务器需要nginx支持;
8.服务不启动的时候主要查看log是否正常。

7.2 配置文件重点 1

loginserver.conf负载均衡服务
HttpPort:对应提供HTTP服务的端口,默认 8080
MsgServerPort:msg服务器上报监听的端口,默认 8100
msgserver.conf 消息服务
ListenPort:连接msg服务器需要的端口
LoginServerIP1:上报msg服务器负载的地址
LoginServerPort1:上报msg服务器负载的端口
RouteServerIP1:route服务器地址和端口
RouteServerPort1:
PushServerIP1:push推送服务器地址和端口
PushServerPort1:
FileServerIP1:文件传输服务器地址和端口
IpAddr1:对外提供的往外ip,需要上报给login 服务器
dbproxyserver.con 数据库中间件服务
ListenPort:该服务监听的端口
ThreadNum:线程池线程数量
DBInstances=teamtalk_master,teamtalk_slave配置数据库实例
#teamtalk_master
teamtalk_master_host=127.0.0.1 数据库ip
teamtalk_master_port=3306 数据库端口
teamtalk_master_dbname=teamtalk 数据库名字
teamtalk_master_username=root 用户名
teamtalk_master_password=123456 密码
teamtalk_master_maxconncnt=16 连接池最大连接数量
#未读消息计数器的redis
unread_host=127.0.0.1 redis地址
unread_port=6379 redis端口
unread_db=1 db索引
unread_maxconncnt=16 连接池最大连接数量

routeserver.conf 路由服务
ListenIP=0.0.0.0 该服务监听ip
ListenMsgPort=8200 该服务监听端口

7.2 配置文件重点 2

fileserver.conf文件传输服务
ClientListenIP=0.0.0.0 该服务监听的地址
ClientListenPort=8600 该服务监听的端口,
供msg server连接

httpmsgserver.conf HTTP reset api服务
ListenPort=8400 该服务监听
ConcurrentDBConnCnt=4 db_proxy服务连接通道数量
DBServerIP1=127.0.0.1 db_proxy服务地址
DBServerPort1=10600
DBServerIP2=127.0.0.1
DBServerPort2=10600
RouteServerIP1=localhost route路由服务地址
RouteServerPort1=8200
msfs.conf 文件存储服务
ListenIP=0.0.0.0 #可以监听多个IP,用;分割
ListenPort=8700 该服务端口
BaseDir=./tmp 存储地址
FileCnt=0 最大文件数量
FilesPerDir=30000 每个目录最大存储文件
GetThreadCount=32 下载线程
PostThreadCount=1 上传线程
pushserver.conf 推送服务
ListenIP=127.0.0.1
ListenPort=8500 该服务监听端口
CertPath=apns-dev-cert.pem
KeyPath=apns-dev-key.pem
KeyPassword=tt@mogujie
#SandBox
#1: sandbox 0: production
SandBox=0

8 通信协议解析

IM即时通讯项目框架分析相关推荐

  1. Android-IM从零开始开发一个即时通讯项目

    Android-IM从零开始开发一个即时通讯项目 https://www.jianshu.com/p/dca480006691 关于聊天室项目 聊天室项目,也被称为即时通讯(IM). 其原理是服务器是 ...

  2. IM即时通讯项目讲解(一) 实现类似qq微信表情面板无缝切换

    IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换 标签(空格分隔): 开源项目 ###该系列技术课程来源慕课IM实战 带后台的IM即时通讯App 全程MVP手把手打造 #####通过该课 ...

  3. 即时通讯项目 java版本qq (含服务器和客户端)源码_即时通讯安卓-QQ互联网和即时通讯云,如何实现即时通讯,这是Android还是Java...

    Android是系统平台. 应用程序所做的是应用程序的开发和完成 也就是说,通信是网络通信,但在手机环境中,网络的情况更复杂,所以我们必须做好结构 安卓即时通讯. 怎么做?安卓版TT即时通讯排行. A ...

  4. IM即时通讯-推荐框架

    CIM https://gitee.com/farsunset/cim CIM是一套基于mina或netty框架下的推送系统,或许有一些企业有着自己一套即时通讯系统的需求 那么CIM为您提供了一个解决 ...

  5. 开源即时通讯IM框架MobileIMSDK的Uniapp端开发快速入门

    ► 相关链接: ① MobileIMSDK-Uniapp端的详细介绍 ② MobileIMSDK-Uniapp端的开发手册new(* 精编PDF版) 一.理论知识准备 您需要对Uniapp和Vue开发 ...

  6. IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换

    该系列技术课程来源慕课IM实战 带后台的IM即时通讯App 全程MVP手把手打造 通过该课程可以学习到以下知识点 1.了解和开发后台项目(这个是需要长期积累的,有了这个可以说入门没问题) 2.学习到I ...

  7. 开源即时通讯IM框架 MobileIMSDK v6.3 发布

    一.更新内容简介 本次更新为次要版本更新,进行了若干优化(更新历史详见:码云 Release Nodes).可能是市面上唯一同时支持UDP+TCP+WebSocket 三种协议的同类开源IM框架. 二 ...

  8. android即时通讯ui框架,android IM即时通信之聊天界面UI框架

    写在最前面 现在很多软件都要求加入即时通信的功能,当然很多都用了三方(环信.融信...).最近,项目也有此需求,我们选择的是环信.环信也提供了UI框架,但是说实在的一般的应用用不了那么多功能,可能就简 ...

  9. Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架

    一.基本介绍 WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯.而Socket.IO是一个完全由JavaScript实现.基于Node.js.支持WebSocket ...

  10. 把TeamTalk(即时通讯项目)中的线程池连接池拆出来单独测试。

    研究过Teamtalk的伙伴会发现它的线程池和连接池与很多文件有关联, 这篇文章主要写,把它的线程池连接池拆出来需要用到哪些文件. 其实我本来只想测试它的连接池的,但发现连接池里套的有线程池,于是就一 ...

最新文章

  1. 为什么eolinker发送老是等待_如何妙用 eoLinker 进行接口测试
  2. wine安装lingoes
  3. .net生成excel并弹出保存提示框(转载)
  4. oracle 表空间-用户-授权-表创建
  5. 编写网关过滤器统一校验登录状态
  6. python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现
  7. 某公司R2631E以太口通过SDH接新桥的ATM交换机,出现丢包问题的解决方法
  8. 2017.10.6 Java命名规范及使用情况
  9. Fiddler使用过程中无法抓取https的解决方法
  10. MQL5语法基础(三)
  11. scp 及 ssh 命令出错解决
  12. 我的个人博客网站是怎么制作的?
  13. **将古典融汇到现代(二)一座连接蕴涵式和三段论的桥--皮尔斯逻辑之五**
  14. #今日论文推荐# 文字秒变3D?苹果发布最新AI生成模型GAUDI,根据文字提示创建3D场景
  15. 使用VMware 16安装macOS 10.14虚拟机实操记录
  16. Google 出的 Guava 是个什么鬼?
  17. 快速的绘制一幅可爱的柯基犬插图教程
  18. java hex_使用java实现hex和ascii码的转换
  19. 整车控制器(VCU)
  20. 程序员常秃顶?Python创始人笑了,防脱发还得学这门语言,不然干脆转行得了

热门文章

  1. 中国第一程序员--求伯君
  2. 啦啦外卖独立版41.7全开源小程序app全套源码带vue源码
  3. 安装chrome Jsonview插件
  4. 淘淘商城第107讲——添加购物车
  5. 《HTTP权威指南》读书笔记
  6. wallys/IPQ8074a/2x(4×4 or 8×8) 11AX MU-MIMO DUAL CONCURRENT EMBEDDEDBOARD
  7. 微信H5支付功能开发
  8. 两台电脑共享鼠标键盘Synergy
  9. java学生签到系统_学生签到系统.pdf
  10. AD7124的调试总结