客户端服务器之间发送消息¶
Session是Fantasy通讯系统中唯一的通讯方式。发送端通过创建Session与服务器建立连接,并进行数据交换。服务器也会为发送端生成对应的Session,确保一对一的安全通讯。当任意一方销毁Session时,对方将立即接收到通讯断开的通知,确保通讯状态的实时同步。
发送端¶
Send¶
该方法用于在发送端与服务器之间进行标准的通信
-
- 消息类型: 普通消息,通常用于发送常规数据或请求。
- 参数:
message
表示要发送给服务器的内容,通常是文本或数据包。
Call¶
该方法用于发送端与服务器之间的远程过程调用(RPC)通信
-
- 参数 request: 这是发送端发送给服务器的请求消息,包含发送端希望执行的操作和相关数据。
- 返回值 response: 服务器处理请求后,将生成一个响应消息并返回给发送端,该响应包含执行结果或错误信息。 服务器会返回一个response消息给发送端
Call示例
Dispose¶
该方法用于销毁会话(Session)。在销毁操作完成后,方法会自动与服务器断开连接,释放相关资源,确保不会再进行任何通信。
服务器¶
每当发送端创建一个新的Session时,服务器也会相应地为其创建一个一对一对应的Session,并保持这一映射关系,直到发送端断开当前连接,服务器才会终止该Session。这样可以确保每个发送端的Session独立且安全,避免了不同发送端之间的Session混淆。
要在服务器上接收发送端发送的消息,需要定义对应的消息接收器来处理这些消息。
Message¶
接收发送端发送的标准消息。
需要定义一个类来继承 Message ,Message 接受一个泛型类型:
- 泛型:
T
指定了需要接收消息的类型。
在继承了 Message 类之后,必须实现一个名为 Run 的方法。这个方法接受两个参数:
- session: 与发送端连接的会话对象,用于维持通信通道的有效性。
- message: 发送端发送过来的消息数据,类型就是Message后面泛型定义的类型。
Message的示例
MessageRPC¶
接收发送端发送的RPC消息。
需要定义一个类来继承 MessageRPC,MessageRPC 类接受两个泛型类型:
- 泛型1:
TRequest
指定了需要接收消息的类型。 - 泛型2:
TResponse
指定了发送端需要接收消息的类型。
在继承了 MessageRPC 类之后,必须实现一个名为 Run 的方法。这个方法接受四个参数:
- session: 与发送端连接的会话对象,用于维持通信通道的有效性。
- request: 发送端发送过来的请求数据,类型由 MessageRPC 类的第一个泛型参数定义。
- response: 需要返回给发送端的响应数据,类型由 MessageRPC 类的第二个泛型参数定义。
- reply: 一个用于立即发送 response 消息给发送端的函数。如果不调用 reply,系统会在 Run 方法执行完毕后自动调用它,将 response 发送回发送端。
MessageRPC示例
public sealed class C2G_TestRequestHandler : MessageRPC<C2G_TestRequest, G2C_TestResponse>
{
protected override async FTask Run(Session session, C2G_TestRequest request, G2C_TestResponse response, Action reply)
{
Log.Debug($"Receive C2G_TestRequest Tag = {request.Tag}");
response.Tag = "Hello G2C_TestResponse";
await FTask.CompletedTask;
}
// 当执行完Run方法后会自动调用reply方法,将response消息发送给发送端。
}
Session¶
Message 和 MessageRPC 的 Run 方法都接受一个 Session 参数。
通过这个 Session 参数,服务端可以与发送端进行通信,并向发送端发送消息但是不能发送RPC消息。
这个 Session 作为通信的上下文,确保了消息的正确路由和状态管理。
Send¶
群发消息¶
在 Run 方法中可以使用 List 或 Dictionary 等数据结构,将 Session 对象添加到一个容器中。
- 可以使用 List 来存储多个 Session 对象,便于按顺序处理或遍历。
- 如果需要通过特定的键值快速访问某个 Session 对象,使用 Dictionary 会更合适。
- 这样在后续的业务逻辑中,可以方便地通过遍历 List 或通过键访问 Dictionary 来使用这些 Session 对象。
群发消息示例
断开连接¶
该方法用于销毁会话(Session)。在销毁操作完成后,方法会自动与发送端断开连接,释放相关资源,确保不会再进行任何通信。