你好,我将 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:继承允许你相当容易地表示数据 - 大概是嵌入 message
和 data
与基本类型相同的基本信息,但很多类似的方案存在不同的布局。
关于object - Redis 发送一个带有消息的对象以用于方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55006886/