Commit 7f807f13 authored by Marc Gravell's avatar Marc Gravell

RedisSubscriber should prefer PING to UNSUBSCRIBE in Ping[Async]()

parent 8a3f264a
...@@ -320,18 +320,32 @@ public bool IsConnected(RedisChannel channel = default(RedisChannel)) ...@@ -320,18 +320,32 @@ public bool IsConnected(RedisChannel channel = default(RedisChannel))
public override TimeSpan Ping(CommandFlags flags = CommandFlags.None) public override TimeSpan Ping(CommandFlags flags = CommandFlags.None)
{ {
// can't use regular PING, but we can unsubscribe from something random that we weren't even subscribed to... var msg = CreatePingMessage(flags, out var server);
RedisValue channel = Guid.NewGuid().ToByteArray(); return ExecuteSync(msg, ResultProcessor.ResponseTimer, server);
var msg = ResultProcessor.TimingProcessor.CreateMessage(-1, flags, RedisCommand.UNSUBSCRIBE, channel);
return ExecuteSync(msg, ResultProcessor.ResponseTimer);
} }
public override Task<TimeSpan> PingAsync(CommandFlags flags = CommandFlags.None) public override Task<TimeSpan> PingAsync(CommandFlags flags = CommandFlags.None)
{ {
// can't use regular PING, but we can unsubscribe from something random that we weren't even subscribed to... var msg = CreatePingMessage(flags, out var server);
RedisValue channel = Guid.NewGuid().ToByteArray(); return ExecuteAsync(msg, ResultProcessor.ResponseTimer, server);
var msg = ResultProcessor.TimingProcessor.CreateMessage(-1, flags, RedisCommand.UNSUBSCRIBE, channel); }
return ExecuteAsync(msg, ResultProcessor.ResponseTimer);
private Message CreatePingMessage(CommandFlags flags, out ServerEndPoint server)
{
bool usePing;
try { usePing = GetFeatures(-1, default, flags, out server).PingOnSubscriber; }
catch { usePing = false; server = null; }
if (usePing)
{
return ResultProcessor.TimingProcessor.CreateMessage(-1, flags, RedisCommand.PING);
}
else
{
// can't use regular PING, but we can unsubscribe from something random that we weren't even subscribed to...
RedisValue channel = Guid.NewGuid().ToByteArray();
return ResultProcessor.TimingProcessor.CreateMessage(-1, flags, RedisCommand.UNSUBSCRIBE, channel);
}
} }
public long Publish(RedisChannel channel, RedisValue message, CommandFlags flags = CommandFlags.None) public long Publish(RedisChannel channel, RedisValue message, CommandFlags flags = CommandFlags.None)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment