回顾一下 Fantasy框架各端间发消息与请求的写法示例
发送内网消息有两种方式
服务器内部通信:服务器之间通常都发路由消息,还有一种是发Server消息
// S2S(路由消息):
MessageHelper.SendInnerRoute/CallInnerRoute(Scene,TargetScene.EntityId,IRouteMessage/IRouteRequest)
// S2S(Server消息):
MessageHelper.SendInnerServer/CallInnerServer(Scene,Server.Id,IMessage/IRequest)
其实:路由消息,也是通过TargetScene获得其Server,用Server进程的Session收发消息。
理解内外网的发送机制
Fantasy把内外网的发送机制作了区分:
- 所有的外网消息都是Scene自己构建了Session收发消息。
- 所有的内网消息都是通过Server进程构建Session收发消息,转发给Scene。
可以认为是外网消息就是Scene之间通信,跟所在的Server进程没关系。
路由消息Handler如何获取session
所以,如果是Server消息,他是IMessage/IRequest消息,Handler的第一个参数就是session实例。
而路由消息Handler,第一个参数是scene,要通过scene.Server来获得Server下的session。
\Fantasy.Net\Runtime\Fantasy.Core\Network\Base\Server\Server.cs
/// <summary>
/// 获取用于与指定目标服务器通信的会话。
/// </summary>
/// <param name="targetServerId">目标服务器的标识符。</param>
/// <returns>与目标服务器的会话。</returns>
public Session GetSession(uint targetServerId)
{