Получение статуса сервера с Enyim Memcached Core - PullRequest
0 голосов
/ 17 декабря 2018

Я использую Enyim Memcached Core в своем проекте .NET CORE, и я попытался получить статус подключения к серверу memcache, но не смог его получить.

Вот мой тестовый код:

// memcache servers
var serverList = new List<Server>
{
  new Server
  {
    Address = "111.111.111.111",
    Port = 11211,
  },
  new Server
  {
    Address = "222.222.222.222",
    Port = 11211,
  }
};

// memcached client options
var clientOptions = new MemcachedClientOptions { Servers = serverList };
var logger = new LoggerFactory();
var clientConfiguration = new MemcachedClientConfiguration(logger, clientOptions);

// create memcached client
MemCachedClient = new MemcachedClient(logger, clientConfiguration);

// get servers connection uptime
ServerStats status = MemCachedClient.Stats();
var serverData = status.GetRaw(
    new IPEndPoint(IPAddress.Parse("111.111.111.111"), 11211),
    "uptime");

// serverData is null!

Я проверил, как данные о состоянии сервера хранятся в классе ServerStats, и он использует словарь, в котором ключи создаются в следующем формате:

[Endopoint AddressFamily / Enpoint IP: Enpoint Port].

В моем примере ServerStats имеет словарь со следующими данными значения ключа:

{[Unspecified / 111.111.111.111: 11211, STATUS DATA VALUE]} {[Unspecified / 222.222.222.222: 11211, STATUS DATA VALUE]}

Таким образом, кажется, что AddressFamily, назначенный при создании клиента memcached, является «Unspecified», но при создании нового IPEndPoint,он инициализируется с помощью AddressFamily по умолчанию «InterNetwork».

Однажды я понял, что причина, по которой я не могу получить статус сервера с помощью «status.GetRaw», заключается в том, что AddressFamily были другими, Я попытался установить для него значение «Unespecified»:

var socketAddress = new SocketAddress(AddressFamily.Unspecified);
IPEndPoint myEndpoint = new IPEndPoint(IPAddress.Parse("111.111.11.11"), 11211);
var myUnspecifiedEndpoint = (IPEndPoint)myEndpoint .Create(socketAddress);

Но он выдает исключение, сообщая, что AddressFamily является InterNetwork и не может быть изменен.

Кто-нибудь знает способ получитьсостояние сервера клиента memcached?

спасибо!

...