配置跨服
——蔡剑彬 C++服务器开发工程师 [email protected]
一、环境配置
硬件环境:X86 PC
软件环境:Windows7,VS2010
二、配置步骤
1、将编译后的GameServer和GateServer拷贝一份,并分别将其命名为GameServer_cross和GateServer_cross;
2、修改GameServer_cross\data\cross下面的文件:CombinServersMap.txt和LogicServersIP.txt,修改方式如下:
CombinServersMap.txt:用于记录需要连接到跨服服务器的原服务器ID以及该原服务器对应的合服后的服务器ID,因为最终连上跨服服务器的服务器是合服后的服务器(如果有合服的话),对于没有合服的服务器,则两个ID都填写一样即可(注意不要有空行!);
LogicServersIP.txt:将需要连接到跨服服务器的服务器ID、IP以及预留侦听其他服务器的端口,记录在上面,跨服服务器会在启动的时候将和这些记录在上面的服务器连接起来,断开了会重连;
3、将crosscfg.ini放到GameServer_cross\win32,配置文件内容如下:
[GameConfig]
;是否是跨服服务器,1是,0否
iscrossserver = 1
;跨服服务器的连接网络监听端口
crossserver_port = 90109
;跨服服务器最大连接数,即最大可连接几个逻辑服crossserver_count = 100
;跨服服务器接受缓冲区大小
crossserver_recsize = 102400
;跨服服务器发送缓冲大小
crossserver_sendsize = 2097152
;跨服服务网络层休眠时间ms
crossserver_sleeptime = 20
;跨服服务器网关ipcross_gateip = 127.0.0.1
;跨服服务器网关对客户端开放port
cross_gateport = 20100
(注意:尽量将跨服服务器的端口都设在20000以后,id都设在2000以后)
4、修改GameServer_cross\win32\ServerConfig.ini,将server_id修改为2000,将Client_listen_port修改为20100,将listen_port修改为20101;
5、修改GateServer_cross\Win32\ServerConfig.ini,将server_id修改为2000,将Client_listen_port修改为20100,将gameserverport修改为20101。
三、实现原理
1、跨服服务器的代码与普通逻辑服务器的代码是一致的,只是根据GameServe_cross\Wind2\crosscfg.ini里面的iscrossserver项来决定启动后走分支与普通服务器的是否一样;
2、在跨服服务器启动时,会读取两个文件,CombinServersMap.txt和LogicServersIP.txt。其中,LogicServersIP.txt是最重要的,因为它记录了跨服服务器最终连接哪些服务器。但这些服务器有些有可能是合服服务器,所以就需要CombinServersMap.txt将所有服务器对应的合服服务器id告诉跨服服务器。这样便能知道那些服可以参与跨服,以及跨服服务器实际上连接的是那些服务器;
3、角色跨服时,其实是客户端获取了跨服服务器的网关服务器的IP和端口号后,断开与当前服务器的连接,转而连接跨服服务器。相当于重新登录于一个新的服务器,但不同的是这次登录是不需要验证的;
4、跨服服务器会记录所有连接的服务器,如果角色有数据需要保存,那么就根据这个角色的ID(该ID与原服务器的ID挂钩),将原服务器的ID解析出来,接着在链表中寻找相应的服务器,最后调用该服务器的数据库服务器,将数据保存起来;
5、退出跨服服务器时,客户端获取了原服务器的IP和端口号后,与跨服服务器断开连接,重新连接到原服务器上。