Redis 发送一个带有消息的对象以用于方法调用

Redis send a object with the message to use on method calling

你好,我将 redis 作为我的 SignalR 应用程序的背板,我希望 redis 向特定组发送消息,无论它们位于哪个 SignalR 实例上。我得到了 SignalR 和 redis 设置 我现在遇到的问题是我想发送属于 SignalR 方法使用的对象类型的数据,该方法将它发送到客户端。所以首先是 publishes

的方法
public async Task RedisBroadcast(string group, string message, object data)
    {
        var pub = Connection.GetSubscriber();
        Program.WriteConsole($"> Broadcasting to Group: {group} Message: {message}");
        await pub.PublishAsync(group, message);
    }

我需要将参数数据与发布消息一起发送,因为稍后在子接收消息的方法中我想做类似的事情

await sub.SubscribeAsync(group, (channel, message) =>
        {
            Program.WriteConsole("Got notification: " + (string)message);

            switch (message)
            {
                case "TopPlayers":
                    TopPlayersbroadcast(group, message, data);
                    break;
            }
        });

所以根据消息,我调用不同的方法,然后将带有数据的消息广播给所有被替换的客户端。这有可能吗?

可能,但您需要在有效载荷内编码数据,即在message内,您在 (channel, message) 对中得到的 RedisValue。 SE.Redis 库非常有意地不对有效载荷应该是什么样子发表意见,所以它不假设你想编码这样的东西。请注意,因为它是 RedisValue,而不是 string,您可以做一些比仅传递原始 string message.

更细微的事情

如果是我,我可能会在这种情况下查看 protobuf-net 和对象继承之类的东西 - 因为 a:它与 SE.Redis 配合得很好,因为 SE.Redis 支持二进制有效负载,并且b:继承允许你相当容易地表示数据——大概是将 messagedata 嵌入到与基本类型相同的基本消息中,但是 lots相似的方案存在不同的布局。