在SignalR中实现向自定义组发送消息的最佳实践

在SignalR中实现向自定义组发送消息的最佳实践,signalr,Signalr,我正在开发一个使用信号器的实时多人游戏。消息传递逻辑不是很简单,我无法使用组来处理它 例如,一条消息将传递给具有某个自定义属性等于某个动态值的用户。这意味着目标观众无法由 Clients.All Clients.AllExcept 我有一个类似这样的映射类: public class Player { public dynamic Client { get; set; } public string ConnectionId { get; set; } public strin

我正在开发一个使用信号器的实时多人游戏。消息传递逻辑不是很简单,我无法使用组来处理它

例如,一条消息将传递给具有某个自定义属性等于某个动态值的用户。这意味着目标观众无法由

Clients.All
Clients.AllExcept
我有一个类似这样的映射类:

public class Player
{
  public dynamic Client { get; set; }

  public string ConnectionId { get; set; }

  public string Name { get; set; }
}
不知何故,我在一个列表对象中检测到了我的所有受众

向列表中的每个人发送消息的最佳方式是什么?通过列表枚举并调用

        foreach (var loopPlayer in players)
        {
            player.Client.sendMessage(message);
        }

我关心的第一个问题是,它每次都会序列化消息。关于第二个,我不知道它在幕后是如何运作的


这两种方法都有效,但我关心的是性能,并试图找到最佳实践。或者我可以使用哪种其他方法

正如您所说,枚举客户机列表每次都会序列化消息,并将这些序列化消息存储在内部缓冲区等中。如果消息相同,则这是不必要的CPU \内存开销。 Clientsids只序列化消息一次,所以性能提升,这绝对是一条路要走

消息传递逻辑不是很简单,我无法使用组来处理它。例如,一条消息将传递给具有某个自定义属性等于某个动态值的用户


团队在开箱即用的扩展场景中工作,如果您发现自己需要扩展,这将带来巨大的好处。所以,也许可以尝试找到一些方法来简化组分配逻辑,即使是以向更多客户端发送一些消息和进行客户端过滤为代价……

谢谢您的回复。例如,我将向10个客户发送消息,但在我的组中,组中有10多人。你是说,向所有人发送消息,然后在客户端忽略它?你认为哪个更贵?通过自定义过滤发送更少的消息,不过滤发送更多消息,并使用组?这是一种折衷。将消息发送到更多的客户端更广泛的组->更多的网络流量而不是更少的CPU\内存压力。我无法做出任何决定,因为我不知道实际的客户数量\可供您使用的资源数量\消息速率。我只是认为组对于扩展是有好处的,因为它可以跨所有服务器工作,而且在CPU\内存方面非常保守。是非常好的关于缩放信号器的深入视频-非常有用…因为你正在创建游戏,你也可以找到有用的是使用信号器实现的多人游戏-提供的源代码。。。
        List<string> ids = new List<string>();
        foreach (var loopPlayer in players)
        {
            ids.Add(item.ConnectionId.ToString());
        }

        Clients.Clients(ids).sendMessage(message);