NetServerComponentOnReadEvent,通过阅读代码,按我的理解,是默认每个客户端对应一个Unit,通过UnitId直接发送。
假如需要每个客户端对应多个Unit,比如在Map服中存在1个,在聊天服中也存在1个,是不是就要改这里的逻辑了?还是说这种做法就是错误的,应该有别的处理方式?
aznable 没错,就是改这里的逻辑,比如做个IChatMessage,这种接口的消息你转发给chat scene
聊天服下为什么会有Unit?你只是要实现一个客户端对应多个Actor服务器,那只需要建立Session就行了啊,客户端可以连接多个Session,然后和不同服务器通讯只需要通过对应的Session就行了
7gxz 我明白可以创建多个Session。但按我理解,Gate表示网关,客户端应该只保留一个Session连接到Gate,发送到其他服应该都由Gate转发。
https://github.com/SagaciousG/UnityPlugins.git 我这里实现了你上面说的,你把Gate想象成你说的聊天服就行了
7gxz 项目很棒,Star+1😇
aznable 我的理解是,网关就比如说是一个看门的(Gate),路人甲(Client)想要进城跟服装店老板(ChatServer)说话,有两种方法,第一种就是找这个看门的带话给服装店,第二种就是给看门的一点小费,让看门的放她进去,直接跟服装店老板说话。如果两个人要说很多话,那是不是直接放进去最好?
7gxz 直连确实能降低Gate的消耗,但还是觉得这是Gate应该负责的部分,否则Gate的作用似乎就没了,客户端可以直接连所有的服务器。
egametang 谢猫大。对于前面的讨论,猫大怎么看?客户端直连也确实是一种方案,有什么优势和弊端呢?
那还搞gate干啥,完全没有意义,至于gate中转延时也就1毫秒,根本不是问题。直连没有任何好处
egametang 明白了,感谢!
没有好处还暴露了风险,lol攻击房间惨案,历历在目