是否可以仅向订阅频道的一个客户发布消息?我知道如何获取地址(客户列表)。是否可以获取地址并仅发布给该客户?
答案 0 :(得分:2)
在Redis中,您发布到频道,而不是订阅者。 所以唯一的方法应该是每个客户端有一个通道。 您可以使用一个公共通道来共享地址,然后将地址用作通道名称。
例如,使用C#和StackExchange.Redis库:
//SERVER
var cnn = ConnectionMultiplexer.Connect("localhost");
var sub = cnn.GetSubscriber();
sub.Subscribe("common", (channel, value) =>
{
Console.WriteLine("SERVER Received in common: {0}", value);
sub.Publish("channel:" + value, "private from server to " + value);
});
//CLIENT
var cnn = ConnectionMultiplexer.Connect("localhost");
var address = "client1";
var sub = cnn.GetSubscriber();
sub.Subscribe("channel:" + address, (channel, value) =>
{
Console.WriteLine("Private: {0}", value);
});
sub.Publish("common", address);
答案 1 :(得分:0)
另一个解决方案:我试图做的是让所有订阅者都听,但只有一个处理消息。我这样做的方法是在redis中创建一个堆栈,并且都订阅了一个密钥的列表命令通知。所以我会在键上输入一个新值,订阅者会得到键空间通知,而LPOP的第一个值会处理它。