首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用libevent监控couchbase水桶

用libevent监控couchbase水桶
EN

Stack Overflow用户
提问于 2014-10-08 16:48:19
回答 1查看 421关注 0票数 2

我正在尝试实现一个C应用程序,该应用程序将监视编写/修改/新文档事件,这些事件发生在一个来自不同应用程序的couchbase远程集群上。我现在熟悉couchbase C SDK和同步实例,但是我很难将它与异步I/O的libevent相结合。

我读过couchbase libevent文档外部事件循环集成示例,但我无法理解如何告诉我的event_base,例如:

监视这个桶上的文件,修改后给我发送一个回调

以下是我目前所做的工作:

首先,我创建了我的libevent选项。

代码语言:javascript
复制
struct event_base *mEvbase = event_base_new();
lcb_t instance;
lcb_error_t err;

struct lcb_create_io_ops_st ciops;
lcb_io_opt_t ioops;

memset(&ciops, 0, sizeof(ciops));
ciops.v.v0.type = LCB_IO_OPS_LIBEVENT;
ciops.v.v0.cookie = mEvbase;

err = lcb_create_libevent_io_opts(0, &ioops, mEvbase);
if (err != LCB_SUCCESS) {
    ERRORMSG0("Failed to create an IOOPS structure for libevent: %s\n", lcb_strerror(NULL, error));
}

然后我创建了我的实例:

代码语言:javascript
复制
struct lcb_create_st create_options;

std::string host = std::string("couchbase://192.168.130.10/");
host.append(bucket);
const char password[] = "password";

create_options.version = 3;
create_options.v.v3.connstr = host.c_str();
create_options.v.v3.passwd = password;
create_options.v.v3.io = ioops;

//Creating a lcb instance
err = lcb_create(&instance, &create_options);
if (err != LCB_SUCCESS) {
    die(NULL, "Couldn't create couchbase handler\n", err);
    return;
}

/* Assign the handlers to be called for the operation types */
lcb_set_bootstrap_callback(instance, bootstrap_callback);
lcb_set_get_callback(instance, generic_get_callback);
lcb_set_store_callback(instance, generic_store_callback);

然后我安排了一个连接。

代码语言:javascript
复制
//We now schedule a connection to the server
err = lcb_connect(instance);
if (err != LCB_SUCCESS) {
    die(instance, "Couldn't schedule connection\n", err);
    lcb_destroy(instance);
}
lcb_set_cookie(instance, mEvbase);

我使用的是libcouchbase版本2.0.17libevent核心版本2.0.so.5.1.9libcouchbase额外版本2.0.so.5.1.9。使用上面的代码,我的实例无法连接到couchbase。我收到以下警告:

代码语言:javascript
复制
event_pending: event has no event_base set. 
event_add: event has no event_base set.

所以这里有两个问题:我不能用上面的代码连接,我不知道该往哪个方向开始接收事件。如果有人将我指向一个链接或这个简单案例的编码示例,这将解除我的障碍。

EN

回答 1

Stack Overflow用户

发布于 2014-10-15 18:08:56

确保您在库和应用程序中都使用相同的libevent版本。从存储库中安装包时,您需要与其中使用的libevent版本(例如ldd /usr/lib64/libcouchbase_libevent.so)保持一致。请记住,这必须是相同的ABI (例如,使用libevent的2.0 -> 1.4 compat层将无法工作,因为这两个版本包含不同的ABI,并且使用与1.4链接的libcouchbase_libevent.so将在2.0下中断)。

有关全文,请参阅对以下问题的评论:)

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

https://stackoverflow.com/questions/26262194

复制
相关文章

相似问题

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