Skip to content

服务器之间发送消息

在许多情况下,服务器之间需要进行消息传递,这时可以使用 NetworkMessagingComponent 来实现服务器之间的通信。NetworkMessagingComponent 提供了高效的网络消息处理机制,确保消息能够在不同服务器之间快速且可靠地传输,不仅支持基本的消息传递,还可以处理复杂的消息路由、错误处理和重传机制,确保在大规模分布式系统中也能够稳定运行。

如何使用

需要使用当前场景(Scene)中的 NetworkMessagingComponent 组件。

SendInnerRoute

发送普通消息到目标实体上。

该方法有两个重载:

  • SendInnerRoute(long routeId, IRouteMessage message)
  • SendInnerRoute(ICollection routeIdCollection, IRouteMessage message)

参数说明:

  • routeId:接收的Entity的RunTimeId。
  • message:需要发送的消息。
  • routeIdCollection:接收的Entity的RunTimeId集合,一般用于群发时使用。

SendInnerRoute

// 发送一个消息给RunTimeId为1的实体。
scene.NetworkMessagingComponent.SendInnerRoute(1, new G2A_TestRequest());
// 群发消息
var routeIds = new List<long>()
{
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
};
scene.NetworkMessagingComponent.SendInnerRoute(routeIds, new G2A_TestRequest());

CallInnerRoute

发送RPC消息到目标实体上。

该方法有一个重载:

  • FTask CallInnerRoute(long routeId, IRouteMessage request)

参数说明:

  • routeId:接收的Entity的RunTimeId。
  • request:请求的消息。

返回参数:

  • 如果消息发送成功,系统将会收到一个返回值。用户可以根据自己预先定义的返回类型,对该返回值进行强制类型转换。

CallInnerRoute

var networkMessaging = scene.NetworkMessagingComponent;
// 发送一个RPC消息给RunTimeId为1的实体。
var response =
     (G2A_TestResponse)await networkMessaging.CallInnerRoute(1, new G2A_TestRequest());

SendAddressable

发送一个Addressable消息给目标。

该方法有一个重载:

  • FTask SendAddressable(long addressableId, IRouteMessage message)

参数说明:

  • addressableId:接收的addressableId,具体看Addressable消息
  • message:发送的消息。

SendAddressable

var networkMessaging = scene.NetworkMessagingComponent;
// 发送一个Addressable消息给目标。
var response = await networkMessaging.SendAddressable(1, new G2A_TestRequest());

CallAddressable

发送一个RPCAddressable消息给目标。

该方法有一个重载:

  • FTask CallAddressable(long addressableId, IRouteMessage request)

参数说明:

  • addressableId:接收的addressableId,具体看Addressable消息
  • message:请求的消息。

返回参数:

  • 如果消息发送成功,系统将会收到一个返回值。用户可以根据自己预先定义的返回类型,对该返回值进行强制类型转换。

CallAddressable

var networkMessaging = scene.NetworkMessagingComponent;
// 发送一个RPCAddressable消息给目标。
var response =
     (G2A_TestResponse)await networkMessaging.CallAddressable(1, new G2A_TestRequest());