libcoubase源码解析

libcouchbase 是 Couchbase 的 C 语言客户端库,支持 libevent 和 libev 作为事件循环。本文深入解析其异步网络编程的三大核心:事件循环接口、读写缓冲和事件回调。重点关注 lcb_io_run_event_loop、ringbuffer 的使用以及 lcb_server_event_handler 在事件处理中的角色。源码分析展示了如何通过长连接和事件更新实现高效通信。
摘要由CSDN通过智能技术生成

libcouchbase是couchbase的客户端库,有很多的语言版本,现在看的是c语言2.0.6版本。

libcouchbase支持时间循环使用libevent或者libev,并且在默认情况下,优先选择libevent,如果不存在libevent,再使用libev,这样的逻辑选择在函数栈

#0  create_v1 (io=0x7fffffffd5d8, options=0x7fffffffd500) at src/iofactory.c:218
#1  0x00002aaaaaacd34c in create_v0 (options=0x7fffffffd520, io=0x7fffffffd5d8) at src/iofactory.c:202
#2  lcb_create_io_ops (io=0x7fffffffd5d8, io_opts=<optimized out>) at src/iofactory.c:172
#3  0x00002aaaaaac7a9e in lcb_create (instance=0x2aaaace8b220, options=<optimized out>) at src/instance.c:311

中能够提现出来。

作为一个异步的网络程序,需要下面三个关键部件:

1 读写事件循环,更新接口

2 读写缓冲

3 读写事件回掉回掉

对应libcouchbase,为:

1 lcb_io_run_event_loop,这是个事件循环接口,因为选择的libev或者libevent不同而具体实现不同。lcb_io_update_event,这是事件更新接口,用于开始或者结束事件监测。

2 ringbuffer,作为读写的缓冲层,在可读事件发生后,会从socket上读数据到buffer中,当可写事件发生后,会从socket上写数据到buffer中

3 lcb_server_event_handler,在读写事件发生后,调用具体的读写函数:do_send_data和do_read_data

真正进行写操作的栈如下:

#0  0x0000003267c0ed20 in sendmsg () from /lib64/libpthread.so.0
#1  0x00002aee4385128c in lcb_io_sendv (iops=0x2aee435dc540, sock=<optimized out>, iov=<optimized out>, niov=<optimized out>) at plugins/io/libev/plugin-libev.c:113
#2  0x00002aee411f0f6a in do_send_data (c=<optimized out>) at src/event.c:318
#3  lcb_server_event_handler (sock=<opt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值