Я пытаюсь выполнить приложение C, который будет следить за пишет/модификации/новые документы события, происходящие на couchbase удаленном кластере, поступающей из различного применения. Теперь я знаком с couchbase C SDK и синхронными экземплярами, но у меня есть проблема с его объединением с libevent для асинхронного ввода-вывода.Мониторинг couchbase ведро с Libevent
Я прочитал couchbase libevent plugin documentation и external event loop integration example, но я не могу понять, как я бы сказал мой event_base, что, например:
Monitor этот файл на этом ведре и отправить мне обратный вызов, когда это модифицированный
Вот что я до сих пор:
Во-первых, я создаю мой Libevent вариант IO
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));
}
, а затем создать свой экземпляр:
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);
, а затем запланировать соединение.
//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.17, ядра Libevent версии 2.0.so.5.1.9 и Libevent дополнительных версий 2.0.so.5.1.9. С помощью кода выше мой экземпляр не может подключиться к couchbase. Я получаю следующие предупреждения:
event_pending: event has no event_base set.
event_add: event has no event_base set.
So две проблемы здесь: Я не могу подключиться, используя код выше, и я не знаю, в каком направлении двигаться, чтобы начать получать события. Если кто-то укажет мне на ссылку или кодированный пример этого простого случая, который разблокирует меня.
Вы бы запрашивающие уведомления от сервера, когда элемент изменен. К сожалению, в настоящее время это не поддерживается в самом SDK. Однако вы можете взглянуть на TAP или DCP в соответствии с вашими потребностями. Просьба уточнить, не то, что вы хотите. –
Благодарим вас за ответ. Можете ли вы дать мне ссылку на TAP или DCP, потому что я понятия не имею, что это такое, и Google не поможет. – Starscream
TAP и DCP - это внутренние протоколы, используемые узлами для репликации данных между собой. Хотя это внутренние протоколы, вы все равно можете их использовать. В настоящее время Java SDK имеет TAP API. В SDK SD нет интерфейса для TAP в настоящее время. См. Http://www.couchbase.com/autodocs/couchbase-java-client-1.1.4/com/couchbase/client/TapClient.html –