gpt4 book ai didi

c# - 如何获取 ISubscriber 连接的客户端 ID?

转载 作者:行者123 更新时间:2023-12-04 07:51:13 25 4
gpt4 key购买 nike

我正在使用 StackExchange.Redis NuGet 包。
我想获取调用 redis.GetSubscriber() 时创建的连接的客户端 ID .此方法返回 ISubscriber 类型的对象并创建到 redis 服务器的新连接。
我在这个对象上找不到任何属性或方法,这些属性或方法提供了对其使用的连接的客户端 ID 的访问。
我知道我可以发送 CLIENT ID命令到 redis,但这无济于事,因为似乎没有办法通过 ISubscriber 手动发送此命令对象或通过其方法和属性可访问的任何对象。
我知道我可以调用redis.GetDatabase()然后运行 ​​db.Execute("CLIENT", "ID") , 但是 GetDatabase()创建一个新连接,并且返回的客户端 ID 不是 ISubscriber 使用的客户端 ID目的。

var redis = ConnectionMultiplexer.Connect("localhost:6379");

// This returns an ISubscriber object and creates a new connection
var subscriber = redis.GetSubscriber(); // I want the client id for this connection

// This returns an IDatabase object and also creates a new connection
var db = redis .GetDatabase();
var dbClientId = invalidatorDb.Execute("CLIENT", "ID"); // not the client id I want
有人可以提供一些建议吗?

最佳答案

这是一个非常有趣的问题;尤其:

  • CLIENT ID操作仅从 Redis 5.0 开始存在
  • CLIENT ID一旦连接处于订阅者模式,就无法执行操作

  • 要查看后者,请考虑以下跟踪(我在 # 之后发表评论)
    > ping # check connection
    < +PONG

    > client id # check can get client id on vanilla connection
    < :5

    > subscribe foo # switch to subscriber mode
    < *3
    < $9
    < subscribe
    < $3
    < foo
    < :1

    > client id # check can get client id on subscriber connection
    < -ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context
    这意味着要获得 CLIENT ID对于订阅者连接,我们需要更改库以在管道中比您可以访问的时间更早地发出该命令,然后才能成为订阅者。实际上,我们需要发出一个投机 CLIENT ID以防我们稍后需要它作为连接握手的一部分。我并不反对——它足够便宜,而且我们可以轻松地为所有连接做到这一点;但是:它确实需要更改库。
    我猜这是因为您正在尝试实现 CLIENT TRACKINGREDIRECT选项,因为订阅者客户端 ID 没有那么多替代用途。
    注意:您可以尝试猜测 CLIENT LIST ,但我不建议这样做。

    关于c# - 如何获取 ISubscriber 连接的客户端 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66964604/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com