01服务器端的程序架构整体介绍
服务器端的程序架构介绍
参考:https://balloonwj.blog.csdn.net/article/details/71518551
1、整体框架

2、各个服务作用描述
Android/iOS/PC:各种客户端;LoginServer (C++):负载均衡服务器,分配一个负载小的MsgServer给客户端使用;MsgServer(C++):消息服务器,负责维护各个客户端的连接,消息转发等功能,提供客户端大部分信令(消息命令)处理功能,包括私人聊天、群组聊天等;RouteServer (C++):路由服务器,为登录在不同MsgServer的用户提供消息转发功能,当msg_server发现某个用户不在本服务器内, 而又有消息需要发给他,就会将消息转发给route_server,route_server会将消息发给相应的msg_server;FileServer (C++):文件服务器,提供客户端之间得文件传输服务,支持在线以及离线文件传输;MsfsServer (C++):图片存储服务器,提供头像,图片传输中的图片存储服务;DBProxy (C++):数据库代理服务器,在TT中负责了主要的业务逻辑,主要与存储层打交道,提供mysql以及redis的访问服务,屏蔽其他服务器与mysql与redis的直接交互;HttpMsgServer(C++):对外接口服务器,提供对外接口功能,Webserver,成员管理功能;PushServer(C++): 消息推送服务器,负责Android、 IOS客户端提醒消息的推送, 类似微信的锁屏提醒消息。(IOS消息推送必须走apns)
3、启动顺序
一般来说,前端的服务会依赖后端的服务,所以一般先启动后端服务,再启动前端服务。建议按以下顺序启动服务:
1. 启动db_proxy。
2. 启动route_server,file_server,msfs
3. 启动login_server
4. 启动msg_server
那么我就按照服务端的启动顺序去讲解服务端的一个流程概述。
第一步:启动db_proxy后,db_proxy会去根据配置文件连接相应的MySQL实例,以及redis实例;第二步:启动route_server,file_server,msfs后,各个服务端都会开始监听相应的端口;第三步:启动login_server,login_server就开始监听相应的端口(8080),等待客户端的连接,而分配一个负载相对较小的msg_server给客户端;第四步:启动msg_server(端口8000),msg_server启动后,会去主动连接route_server,login_server,db_proxy_server,会将自己的监听的端口信息注册到login_server去,同时在用户上线,下线的时候会将自己的负载情况汇报给login_server。
3.4各个端口
| 服务 | 说明 | 端口 | 备注 |
|---|---|---|---|
| login_server | 登录服务器,负责身份验证,负责给登录成功的客户端分配msg_server。 这个服务监听在两个端⼝,⼀个是tcp端⼝8100,⽤于和后端的服务器交互,另⼀个是http端⼝8080,需对外开放。 | 8100、8080 | 8080需要对外开放 、8100看是否跨公⽹ |
| msg_server | 消息服务器,⽤户登录成功后,就和指定的消息服务器交互。 | 8000 | 需对外开放 |
| route_server | 消息转发,不同msg_server上⽤户交互需要中转站来转发消息。 | 8200 | |
| file_server | ⽂件中转站,临时存储 | 8600 | 需对外开放 |
| msfs_server | ⼩⽂件永久存储,聊天的图⽚、表情等, 端⼝ | 8700 | 需对外开放 |
| db_proxy_server | 数据库中间件,后端为存储层,mysql和redis | 10600 | |
| http_msg_server | 主要提供对外的 web api | 8400 | |
| push_server | 消息推送服务(暂时先不⽤) | 8500 |

浙公网安备 33010602011771号