简介:
TeamTalk是一套开源的企业办公即时通讯软件,作为整套系统的组成部分之一,TTServer为TeamTalk 客户端提供用户登录,消息转发及存储等基础服务。
TTServer主要包含了以下几种服务器:
LoginServer (C++): 登录服务器
一台负载均衡服务器,用来通知客户端连接到负载最小的msg_server。login_server在整个TT的架构中,可以简单的理解为一个负载均衡的作用,在login_server中,同样在内存中维护了所有的msg_server的地址以及其目前的负载情况。
MsgServer (C++): 消息服务器
,提供客户端大部分信令处理功能,包括私人聊天、群组聊天等.
客户端连接服务器(N台)。客户端通过msg_server登陆,保持长连接。
1
msg_server 启动后会去主动连接login_server,并通过数据包CImPduMsgServInfo向login_server注册自己的信息。
2
当有用户连接上msg_server并登录成功或者用户断开连接的时候,会向login_server发送一个CImPduUserCntUpdate数据包通知login_server,login_server收到后,修改对应msg_server的负载值。
3
当有用户连接上msg_server并登录成功或者用户断开连接的时候,会向route_server发送一个CImPduUserStatusUpdate数据包通知route_server,route_server记录用户的msg_server。
4
msg_server 启动后会去主动连接route_server,并通过数据包CImPduOnlineUserInfo向route_server报告自己当前在线的用户情况。
RouteServer (C++): 路由服务器
一台消息转发服务器,客户端消息发送到msg_server。msg_server判断接收者是否在本地,是的话,直接转发给目标客户端。否的话,转发给route_server。route_server接收到msg_server的消息后,获取to_id所在的msg_server,将消息转发给msg_server。msg_server再将消息转发给目标接收者。
1
route_server 在整个tt中的作用是一个消息转发的地方,其在内存中维护了全局用户信息。当有多个msg_server的时候,route_server的作用就是在多个msg_server之间中转消息。
2
g_rs_user_map是一个hash_map,保存了全局用户信息,当有用户上线的时候,msg_server会将该用户的状态发送到route_server,route_server就会在g_rs_user_map里面插入一条记录。
FileServer (C++): 文件服务器,提供客户端之间得文件传输服务,支持在线以及离线文件传输
MsfsServer (C++): 图片存储服务器,提供头像,图片传输中的图片存储服务
DBProxy (JAVA): 数据库代理服务器,提供mysql以及redis的访问服务,屏蔽其他服务器与mysql与redis的直接交互
数据库操纵
消息记录,获取用户信息等需要操作数据库的,由msg_server发送到db_server。db_server操作完后,发送给msg_server。数据库操作
当前支持的功能点:
私人聊天
群组聊天
文件传输
多点登录
组织架构设置.
系统结构图
文件传输的过程 依赖于file_server 但是请求进行文件传输 会先问msg_server msg_server 会返回file_server 给客户端用的服务ip以及端口同时通知接收端 然后发送端跟接收段再跟 file_server连接 接着验证一下 然后接收端发出 拉流请求 由file_server转发给发送端(如果是离线文件 就是file_server产生拉流请求) 发送端根据拉流请求 传输对应文件的内容