前言

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

配置说明

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

Name    内网IP            外网IP(IP1/IP2)       InstanceC1      192.168.1.101   1.2.3.1/5.6.7.1     login_server1C2      192.168.1.102   1.2.3.2/5.6.7.2     login_server2C3      192.168.1.103   1.2.3.3/5.6.7.3     msg_server1C4      192.168.1.104   1.2.3.4/5.6.7.4     msg_server2C5      192.168.1.105   1.2.3.5/5.6.7.5     route_server1C6      192.168.1.106   1.2.3.6/5.6.7.6     route_server2C7      192.168.1.107   1.2.3.7/5.6.7.7     file_serverC8      192.168.1.108   1.2.3.8/5.6.7.8     msfsC9      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=80MsgServerListenIP=192.168.1.101MsgServerPort=8100

配置例子2:

ClientListenIP= 1.2.3.2;5.6.7.2   ClientPort=80MsgServerListenIP=192.168.1.102MsgServerPort=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.3ListenPort=443HttpListenIP=1.2.3.3;5.6.7.3HttpListenPort=80ConcurrentDBConnCnt=2DBServerIP1=192.168.1.109DBServerPort1=10200DBServerIP2=192.168.1.109DBServerPort2=10201LoginServerIP1=192.168.1.101LoginServerPort1=8100LoginServerIP2=192.168.1.102LoginServerPort2=8100RouteServerIP1=192.168.1.105RouteServerPort1=8400RouteServerIP2=192.168.1.106RouteServerPort2=8400FileServerIP1=192.168.1.107FileServerPort1=8500IpAddr1=1.2.3.3IpAddr2=5.6.7.3MaxConnCnt=100000   

配置例子2:

ListenIP=1.2.3.4;5.6.7.4ListenPort=443HttpListenIP=1.2.3.4;5.6.7.4HttpListenPort=80ConcurrentDBConnCnt=2DBServerIP1=192.168.1.109DBServerPort1=10200DBServerIP2=192.168.1.109DBServerPort2=10201LoginServerIP1=192.168.1.101LoginServerPort1=8100LoginServerIP2=192.168.1.102LoginServerPort2=8100RouteServerIP1=192.168.1.105RouteServerPort1=8400RouteServerIP2=192.168.1.106RouteServerPort2=8400FileServerIP1=192.168.1.107FileServerPort1=8500IpAddr1=1.2.3.4IpAddr2=5.6.7.4MaxConnCnt=100000   

3、route_server

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

route_server配置:

ListenIP=ListenMsgPort=

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

配置例子1:

ListenIP=192.168.1.105ListenMsgPort=8400

配置例子2:

ListenIP=192.168.1.106ListenMsgPort=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.8ListenPort=80BaseDir=./tmpFileCnt=0FilesPerDir=30000GetThreadCount=6PostThreadCount=2

5、file_server

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

Address=ListenPort=TaskTimeout=

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

Address=192.168.1.107ListenPort=8500TaskTimeout=60

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