前言
近期由于忙于工作,还有些纠结个人的事情,本来说好的本文,不得不拖到今天才写。
配置说明
在此,为了便于说明,我们做如下约定:
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长连接):