您好,我将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;
}
});
因此,根据消息,我调用了不同的方法,然后将这些方法与数据一起广播到所有子客户端。这可能吗?
答案 0 :(得分:1)
这可能是 ,但是您需要在有效负载内 对该数据进行编码,即在message
内的RedisValue
内加入(channel, message)
对。 SE.Redis库非常有意识地没有对有效载荷的外观提出意见,因此它不假定您要编码类似的内容。请注意,由于它是RedisValue
,而不是string
,因此您可以做的事情比直接通过原始的string message
还要细致得多。
如果这是我,那么在这种情况下,我可能会看一下像protobuf-net和对象继承之类的东西-因为a:SE.Redis支持二进制有效负载,所以它与SE.Redis很好地兼容,而b:继承允许您可以很容易地表示数据-大概将message
和data
嵌入到与基本类型相同的基本消息中,但是对于类似的方案,存在许多 lots 。 >