本文章已于2021.3.20更新,更正ET 5.0的地址配置以及含义,新增Linux实操步骤

前言

终于还是躲不了,要部署云服务器,但是这方面真的一点经验和知识都没有,所以只能求助别人,顺便共同讨论,一起进步。
感谢快二十了还一事无成喵大王初见的大力支持。

对于Linux部署的实操部分,参见:https://www.lfzxb.top/recastnavigation-and-et-to-linux

正文

ET5.0版本配置

我决定还是以代码作为切入点,来理解服务器的配置。
首先我们来到客户端和服务端第一次通信的地方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
客户端的LoginHelper.cs
//根据全局配置的服务端地址进行第一次通信
ETModel.Session session = ETModel.Game.Scene.GetComponent<NetOuterComponent>().Create(GlobalConfigComponent.Instance.GlobalProto.Address);
Session realmSession = ComponentFactory.Create<Session, ETModel.Session>(session);
R2C_Login r2CLogin = (R2C_Login) await realmSession.Call(new C2R_Login() { Account = account, Password = "111111" });
...
服务端的C2R_LoginHandler.cs
StartConfig config = Game.Scene.GetComponent<RealmGateAddressComponent>().GetAddress();
//这里的gate取的是内网地址,用于和realm进行通讯
IPEndPoint innerAddress = config.GetComponent<InnerConfig>().IPEndPoint;
Session gateSession = Game.Scene.GetComponent<NetInnerComponent>().Get(innerAddress);
G2R_GetLoginKey g2RGetLoginKey = (G2R_GetLoginKey)await gateSession.Call(new R2G_GetLoginKey() {Account = request.Account});
//注意这个取得是外网地址2
string outerAddress = config.GetComponent<OuterConfig>().Address2;
response.Address = outerAddress;
...

OK,上面的代码流程涉及到了内网和外网地址2,那么外网地址1在哪里用了呢?

是启动程序那里的,意为监听客户端传来的信息,会创建一个Socket进行绑定。

但是现在大多人用的都是云服务器,他会将外网IP映射到内网IP(网卡IP),所以一般外网地址1设置为内网IP(注意要和外网地址2的端口一致),外网地址2填的是外网IP。

实际上我试过将Socket绑定到云服务器的公网IP,会直接报错:

image-20210320141419818

现在外网地址都解决了,内网地址该填什么呢?

新版5.0内网地址只支持局域网的群组通信,也就是说如果你的多台服务器已经组成了一个局域网(服务器群组),可以填每个服务器的私有地址,然后进行通信

如果只是单纯的多个服务器,将无法使用,如果有这个需求,得自己拓展一个Inner,做成和Out一样的方式,一个用于绑定Socket,一个用于与其他服务器通信。
总结一下

我们约定,服务器公网IP为192.168.0.1,内网IP为44.117.7.8

image-20210324164534222

最后是全局配置这里