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

标签 object redis stackexchange.redis

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

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内, RedisValue你得到的(channel, message)一对。 SE.Redis 库非常有意地不对有效载荷应该是什么样子发表意见,因此它不会假定您想要编码类似的东西。请注意,因为它是一个 RedisValue , 不是 string ,你可以做一些比传递原始 string message 更细微的事情.

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

关于object - Redis 发送一个带有消息的对象以用于方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55006886/

相关文章:

Java ArrayList 与对象

actionscript-3 - ActionScript - 比较和删除复杂数组的重复项?

lua - 具有大循环的 Redis Lua 脚本

ruby - 使用 God Gem 设置流程启动顺序

redis - 如何使用 StackExchange.Redis 在 F# 中使用事务

javascript - 通过在javascript中传递键和值从数组中获取对象

c# - 为什么 object.ToString() 存在?

c# - StackExchange.Redis.RedisTimeoutException - 由于问题人们如何解决它?

Azure Redis 缓存与 Azure 上的 Redis 云服务

c# - 当键不存在时,带有 When.NotExists 的 StringSetAsync 返回 false