首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用libmemcached连接到memcachedb

无法使用libmemcached连接到memcachedb
EN

Stack Overflow用户
提问于 2015-04-13 12:40:53
回答 1查看 319关注 0票数 0

我正在编写一个小型C++应用程序,它能够使用libmemcached C++应用程序接口连接到memcachedb实例。

memcachedb实例是使用以下命令创建的:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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,我使用以下代码:

代码语言:javascript
复制
#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编译应用程序

代码语言:javascript
复制
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)

当我使用以下命令执行应用程序时:

代码语言:javascript
复制
MemcachedExample 127.0.0.1 21201

它无法检索服务器STATS:

代码语言:javascript
复制
Instantiating client
Adding server host=[127.0.0.1] port=[21201]
Getting server STATS
Unable to get STATS

我做错了什么?如果您有任何见解,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-04-17 13:06:18

查看@Rastmaj指出的tcpdump,我发现在通过我的程序建立连接的转储文件中,没有与我试图建立的连接相关的数据包。

这让我看了一下memcached的C客户端库的C++接口的代码。我发现空的构造函数使用memcached("", 0)初始化memcached_st对象,而接收hostnameport参数的构造函数不仅使用memcached("", 0)初始化memcached_st对象,还使用memcached_server_add函数添加了一个服务器。

虽然在初始化memcached_st对象之后添加服务器时没有明显的原因,但由于C++方法memcache::Memcache::addServer做的是完全相同的事情,所以我找到的解决方案只是改变了一下:

代码语言:javascript
复制
Memcache first_client;

代码语言:javascript
复制
Memcache first_client("--SERVER=" + host + ":" + std::string(argv[2]));

这解决了我的问题,但我仍然缺乏对这种行为的解释,更深入的见解是感激的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29597960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档