采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法

Libcurl较为基本的用法是easyinterface,它是最简单的同步接口,容易理解,实现代码简单,但是性能低下。

  curl_multi_perform() + select():可以实现libcurl的异步多路发送,相对于easy interface有了较大的性能提升,但是select()性能不够好,还受到file descriptors不能大于1024的限制。这两种方法的实现可以参考:http://blog.csdn.net/lijinqi1987/article/details/53925835

  本文来探讨下curl_multi_socket_action(),该发送方式采用libuv的epoll模型,性能最好,但是比较难以理解,其使用步骤主要是:

1、创建一个multi handle;
2、使用CURLMOPT_SOCKETFUNCTION设置socket的回调函数;
3、使用CURLMOPT_TIMERFUNCTION设置超时回调函数,用来指定等待socket激活时的超时时间;
4、使用curl_multi_add_handle()添加easy handle
5、使用一些方法来管理libcurl正在使用的sockets,是你可以检查sockets的行为。可以通过你的代码来实现,或者通过一些第三方库如 libevent or glib来实现。
6、调用curl_multi_socket_action (..., CURL_SOCKET_TIMEOUT, 0, ...) ,获取一个或多个回调函数。
7、等待任意一个libcurl socket的活跃,使用被告知的回调函数的超时值;
8、当检测到activity,为起作用的socket(s)调用curl_multi_socket_action(),如果检测不到activity并且超时时间已到,调用带CURL_SOCKET_TIMEOUT的curl_multi_socket_action

libcurl对大量请求连接提供了管理socket的方法,用户可使用select/poll/epoll事件管理器监控socket事件,可读写时通知libcurl读写数据,libcurl读写完成后再通知用户程序改变监听socket状态,本文借助libuv来实现,两个重要的回调设置:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值