赞
踩
1.需求分析
- 即时通讯重点
- (1)实时性
- http
- socket
- websocket
- (2)数据库
- 数据库表设计
- 分表设计
- 密码存储方式
- 最近会话表
- 未读消息如何体现
- 聊天消息分表问题
- (3)单聊消息发送流程
- 怎么保证数据的不丢失
- 消息序号在哪里生成
- 消息序号生成方式
- 消息如何封装
- 消息发送时的seq有什么作用
- 消息发送后服务器怎么应答?
- 接收端收到数据后如何应答
- (4)客户端的单聊消息未读计数是怎么实现的
- 服务器怎么保留消息未读计数
- 客户端的未读消息计数从何而来
- 客户端未读消息计数清0时向服务器发送了什么,服务器又是怎么清除未读消息计数
- (5)文件传输原理
- 文件传输分为在线传输离线传输
- 在线传输和离线传输有什么区别
- (6)群聊消息
- 如何推送群聊
- 群消息计数器
- 群会话如何更新(每有一个人发送消息,则其他人都需要更新会话消息)
- (7)群成员管理
- 如何创建群
- 如何删除群
- 怎么使用redis管理群成员
- (8)MySQL连接池设计
- 为什么使用连接池
- 连接池设置多大合适?
- (9)redis连接池设计
- 为什么使用连接池
- 连接池设置多大合适?
- (10)并发能力
- 如何做到百万并发
- 如何做到千万并发
-
-
-
- 文件服务:
- (1)在线传输(不会存到服务器)
- (2)离线文件(会存到服务器)

2.设计
- 1.Android/iOS/PC:各种客户端。
- 2.LoginServer:主要负责负载均衡的作用,当收到客户端的请求时,分配一个负载最小的MsgServer给客户端.
- 3.MsgServer:通讯的主要服务端,负责维护各个客户端的链接,消息转发等功能.
- 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:简单的管理功能.
- 10.HTTPMsgServer:提供http接口.
-
-
- 业务流程:
- (1)从loginserver中获取msgserver的ip+端口;
- (2)登录到msgserver;
- (3)把账号密码有msgserver转发到dbproxy,然后把验证结果返回msgserver;
- (4)返回登录结果,成功则保持长连接,失败则断开.
-
-
- LoginServer主要是看MsgServer的负载均衡情况:
- (1)看哪个MsgServer比较有空闲;
- (2)看看有没有同你在同一个区域的MsgServer.
-
- MsgServer:
- (1)登录请求;
- (2)保持长连接;
- (3)发送消息,接收消息.
-
- DBProxy:
- (1)登录验证;
- (2)存储消息;
- (3)可以部署多个,支持水平拓展.
- 这里的分表没有像mycat那么专业,支持消息的分表.
-
-
- RouteServer:
- (1)消息转发
- 比如MsgServer1上有Amy,MsgServer2上有Bob,Amy向给Bob发消息,MsgServer1和MsgServer2之间
- 是没有通路的,只有通过RouteServer这个来做转发.
-
-
- HTTPMsgServer提供httpapi,高扩展性:
- (1)注册账号;
- (2)查询用户信息;
- (3)发送聊天消息.
- ...
-
- fileserver文件传输服务,离线文件需要发送给fileserver进行保存.
- MsfsServer文件存储,小型的http文件存储服务器.(图片,语音)
-
-

2.项目
安装过程出错的情况:
2.1 需要有相应的权限
2.2 需要有相应文件夹 mkdir -p base/pb/lib/linux
安装ARP二--下载链接失效
apache-log4cxx-0.10.0.tar.gz--编译与部署
usr/bin/ld: cannot find -lxxx的解决方案
mysql.h: No such file or directory--解决方案
配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因
pam_succeed_if(sshd:auth): requirement “uid 」= 1000“ not met by user “root“
linux中/etc/pam.d/system-auth文件详解
- 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是否正常。
- 9.查看后台七个服务是否都正常;
- 10.查看msfs是否正常.
-
- 查看redis是否正常运行:
- lsof -i:6379
-
- mysql查看是否正常运行:
- lsof -i:3306
-
- 查看php是否正常运行,在我的腾讯云服务器上的部署:
- ps -ef | grep php-fpm
-
-
-
- dbroxy启动:
- cd /root/module/IM/auto_setup/im_server/im-server-1.0/db_proxy_server
- nohup ./db_proxy_server &

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。