Невозможно подключиться к memcachedb с помощью libmemcached

Я пишу небольшое приложение C ++, которое может подключиться к memcachedb экземпляр, использующий libmemcached C ++ API.

memcachedb Экземпляр был создан с помощью следующей команды:

memcachedb -m 64 -p 21201 -A 4096 -u memcachedb -l 127.0.0.1 -H /var/lib/memcachedb -f /var/lib/memcachedb/default.db -U off

Я могу получить STATS сервера, выполнив:

telnet 127.0.0.1 21201
stats
STAT pid 1972
STAT uptime 124936
STAT time 1428898165
STAT version 1.2.0
STAT pointer_size 64
STAT rusage_user 5.687019
STAT rusage_system 13.329336
STAT ibuffer_size 512
STAT curr_connections 5
STAT total_connections 12
STAT connection_structures 6
STAT cmd_get 4
STAT cmd_set 4
STAT get_hits 4
STAT get_misses 0
STAT bytes_read 236
STAT bytes_written 2171
STAT threads 4
END

Для получения сервера STATS программно я использую следующий код:

#include <libmemcached/memcached.hpp>

#include <string>

#include <stdio.h>
#include <string.h>

using namespace std;
using namespace memcache;

int main(int argc, char **argv) {

std::string host(argv[1]);
int port;
istringstream(std::string(argv[2])) >> port;

printf("%s\n", "Instantiating client");

Memcache first_client;

printf("Adding server host=[%s] port=[%d]\n", host.c_str(), port);
first_client.addServer(host, port);

printf("%s\n", "Getting server STATS");
map<string, map<string, string> > my_stats;
bool gotStats = first_client.getStats(my_stats);

if (gotStats) {
printf("%s\n", "Got STATS");
} else {
printf("%s\n", "Unable to get STATS");
}

return EXIT_SUCCESS;
}

Я компилирую приложение, используя следующие Makefile:

CXXFLAGS =  -O2 -g -Wall -fmessage-length=0
OBJS =      MemcachedExample.o
LIBS =      -lmemcached
TARGET =    MemcachedExample

$(TARGET):  $(OBJS)
$(CXX) -o $(TARGET) $(OBJS) $(LIBS)

all:    $(TARGET)

clean:
rm -f $(OBJS) $(TARGET)

Когда я выполняю приложение, используя следующую команду:

MemcachedExample 127.0.0.1 21201

Не удается получить сервер STATS:

Instantiating client
Adding server host=[127.0.0.1] port=[21201]
Getting server STATS
Unable to get STATS

Что я делаю неправильно? Я был бы признателен за любое понимание.

0

Решение

Глядя на tcpdump, как указано @Rastmaj, я обнаружил, что в дампе для соединения через мою программу не было пакетов, связанных с соединением, которое я пытался установить.

Это заставило меня взглянуть на код интерфейса C ++ для клиентской библиотеки C для memcached. Я обнаружил, что пустой конструктор инициализировал memcached_st использование объекта memcached("", 0) в то время как конструктор получает hostname а также port аргументы не только инициализировали memcached_st использование объекта memcached("", 0) но также добавил сервер, используя memcached_server_add функция.

Хотя нет очевидной причины, почему это работает при добавлении сервера сразу после инициализации memcached_st объект, так как метод C ++ memcache::Memcache::addServer делает то же самое, решение, которое я нашел, просто менялось:

Memcache first_client;

за

Memcache first_client("--SERVER=" + host + ":" + std::string(argv[2]));

Это решает мою проблему, но мне все еще не хватает объяснения такого поведения, дальнейшее понимание приветствуется.

0

Другие решения


По вопросам рекламы [email protected]