前言

近期由于忙于工作,还有些纠结个人的事情,本来说好的本文,不得不拖到今天才写。

配置说明

在此,为了便于说明,我们做如下约定:

Name    内网IP            外网IP(IP1/IP2)       Instance
C1      192.168.1.101   1.2.3.1/5.6.7.1     login_server1
C2      192.168.1.102   1.2.3.2/5.6.7.2     login_server2
C3      192.168.1.103   1.2.3.3/5.6.7.3     msg_server1
C4      192.168.1.104   1.2.3.4/5.6.7.4     msg_server2
C5      192.168.1.105   1.2.3.5/5.6.7.5     route_server1
C6      192.168.1.106   1.2.3.6/5.6.7.6     route_server2
C7      192.168.1.107   1.2.3.7/5.6.7.7     file_server
C8      192.168.1.108   1.2.3.8/5.6.7.8     msfs
C9      192.168.1.109   1.2.3.9/5.6.7.9     db_proxy

db_proxy 开启两个实例,分别监听10200与10201两个端口。所有的服务端都在一个内网里面。
配置中的X代表数字。

1、login_server

可以简单的把login_server理解成为一个负载均衡服务器。msg_server在启动的时候会将自己监听的ip,port注册到告知login_server,当有用户登录或登出到msg_server的时候,msg_server会通知login_server进行变更,当用户通过login_server请求msg_server的ip与port的时候,login_server通过一个简单的规则,给出负载相对较小的msg_server回复给用户。

login_server的配置:

ClientListenIP=   
ClientPort=
MsgServerListenIP=
MsgServerPort=

ClientListenIP 这个是用来配置login_server监听的IP地址,供客户端连接时候的IP,如果希望监听所有的IP则填写0.0.0.0。如果监听多个IP,可以使用";"来分割,比如:1.2.3.1;5.6.7.1 这样就会监听同时监听这两个IP。
ClientPort 这个是用来配置login_server监听的Port
MsgServerListenIP 这个是用来配置login_server与msg_server通信用的IP。这个配置建议使用内网地址(如果login_server与msg_server在同一个内网的话),同样可以使用";"来分割监听多个IP。
MsgServerPort 这个是用来配置login_server与msg_server通信的端口。

配置例子1:

ClientListenIP= 1.2.3.1;5.6.7.1   
ClientPort=80
MsgServerListenIP=192.168.1.101
MsgServerPort=8100

配置例子2:

ClientListenIP= 1.2.3.2;5.6.7.2   
ClientPort=80
MsgServerListenIP=192.168.1.102
MsgServerPort=8100
2、msg_server

msg_server的配置相对来说比较复杂,该服务端也是最复杂的一个,其与login_server,route_server,db_proxy保持通信。其负责整个TeamTalk的整个核心通信功能。

msg_server的配置:

ListenIP=
ListenPort=

HttpListenIP=
HttpListenPort=

ConcurrentDBConnCnt=
DBServerIPX=
DBServerPortX=

LoginServerIPX=
LoginServerPortX=

RouteServerIPX=
RouteServerPortX=

FileServerIPX=
FileServerPortX=

IpAddr1=     
IpAddr2=     
MaxConnCnt=

ListenIP 这个是用来配置msg_server监听客户端连接的IP,供客户端连接的时候使用,同login_server一样,如果希望监听所有的IP,可以配置为0.0.0.0,如果监听多个IP,可以使用";"分割。ListenPort 这个是用来配置msg_server监听的Port。HttpListenIP:HttpListenPort是使msg_server拥有http的功能。ConcurrentDBConnCnt 这个是配置与db_proxy的连接的并发。会于下面的四个配置一起使用。LoginServerIPX与LoginServerPortX用来配置与login_server通信用。
RouteServerIPX与RouteServerPortX用来配置与route_server通信用。IpAddr1 与 IpAddr2用来向login_server 发送自己监听的IP。保持与ListenIP一致。MaxConnCnt 用来告知login_server自己最大接受多少个连接并发。

配置例子1:

ListenIP=1.2.3.3;5.6.7.3
ListenPort=443

HttpListenIP=1.2.3.3;5.6.7.3
HttpListenPort=80

ConcurrentDBConnCnt=2
DBServerIP1=192.168.1.109
DBServerPort1=10200
DBServerIP2=192.168.1.109
DBServerPort2=10201

LoginServerIP1=192.168.1.101
LoginServerPort1=8100
LoginServerIP2=192.168.1.102
LoginServerPort2=8100


RouteServerIP1=192.168.1.105
RouteServerPort1=8400
RouteServerIP2=192.168.1.106
RouteServerPort2=8400

FileServerIP1=192.168.1.107
FileServerPort1=8500

IpAddr1=1.2.3.3
IpAddr2=5.6.7.3
MaxConnCnt=100000   

配置例子2:

ListenIP=1.2.3.4;5.6.7.4
ListenPort=443

HttpListenIP=1.2.3.4;5.6.7.4
HttpListenPort=80

ConcurrentDBConnCnt=2
DBServerIP1=192.168.1.109
DBServerPort1=10200
DBServerIP2=192.168.1.109
DBServerPort2=10201

LoginServerIP1=192.168.1.101
LoginServerPort1=8100
LoginServerIP2=192.168.1.102
LoginServerPort2=8100


RouteServerIP1=192.168.1.105
RouteServerPort1=8400
RouteServerIP2=192.168.1.106
RouteServerPort2=8400

FileServerIP1=192.168.1.107
FileServerPort1=8500

IpAddr1=1.2.3.4
IpAddr2=5.6.7.4
MaxConnCnt=100000   
3、route_server

route_server比较简单,就是用来转发msg_server的消息。同时用来保持各个用户的状态以及该用户在哪个msg_server上。

route_server配置:

ListenIP=
ListenMsgPort=

ListenIP:ListenMsgPort 是用来配置与msg_server通信用的。

配置例子1:

ListenIP=192.168.1.105
ListenMsgPort=8400

配置例子2:

ListenIP=192.168.1.106
ListenMsgPort=8400
4、msfs

这个是小文件存储系统,主要是用来保存用户头像以及聊天中产生的图片、语音等小文件。msfs 提供的一个简单的http服务。
msgs 配置:

ListenIP=
ListenPort=
BaseDir=
FileCnt=
FilesPerDir=
GetThreadCount=
PostThreadCount=

ListenIP:ListenPort 的含义与之前各个服务端的配置意义相同。BaseDir 是msfs保存文件的路径,msfs在启动的时候,会在该目录下产生256个目录,每个目录下面再产生256个子目录。FileCnt用来记录已经存储的文件数目,该配置在msfs关闭的时候会被程序重写。FilesPerDir每个目录下面最多保存多少个小文件,GetThreadCount获取小文件的线程数目,PostThreadCount上传小文件的线程数目。建议GetThreadCount + PostThreadCount = 内核数目,GetThreadCount >= PostThreadCount。

所以msfs总共可以存储的文件数目为:256*256*FilesPerDir

配置例子1:

ListenIP=1.2.3.8;5.6.7.8
ListenPort=80
BaseDir=./tmp
FileCnt=0
FilesPerDir=30000
GetThreadCount=6
PostThreadCount=2
5、file_server

file_server的功能是提供给用户传输文件使用。同时也存储用户传输的离线文件。
file_server配置项:

Address=
ListenPort=
TaskTimeout=

Address:ListenPort与上述服务端的IP:Port的意义一样,供与客户端通信用。TaskTimeout用来配置文件传输时效。
配置例子1:

Address=192.168.1.107
ListenPort=8500
TaskTimeout=60

以上是c++各个服务端的配置项,配置完成后整个TeamTalk的部署如下(其中虚线代表tcp短连接,实线代表tcp长连接):