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

时间:2019-03-05 16:01:46

标签: object redis stackexchange.redis

您好,我将Redis用作SignalR应用程序的背板,无论他们坐在哪个SignalR实例上,我都希望Redis向特定组发送消息。我得到了SignalR并重新设置了我现在遇到的问题是我想发送的数据类型为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);
    }

我需要将参数数据与Publish消息一起向下发送,因为稍后在该方法中,该子项接收到了我想做的与此类似的消息

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

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

因此,根据消息,我调用了不同的方法,然后将这些方法与数据一起广播到所有子客户端。这可能吗?

1 个答案:

答案 0 :(得分:1)

这可能是 ,但是您需要在有效负载内 对该数据进行编码,即在message内的RedisValue内加入(channel, message)对。 SE.Redis库非常有意识地没有对有效载荷的外观提出意见,因此它不假定您要编码类似的内容。请注意,由于它是RedisValue,而不是string,因此您可以做的事情比直接通过原始的string message还要细致得多。

如果这是我,那么在这种情况下,我可能会看一下像protobuf-net和对象继承之类的东西-因为a:SE.Redis支持二进制有效负载,所以它与SE.Redis很好地兼容,而b:继承允许您可以很容易地表示数据-大概将messagedata嵌入到与基本类型相同的基本消息中,但是对于类似的方案,存在许多 lots 。 >