ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 进行并行libcurl HTTP请求

2019-10-02 10:06:53  阅读:307  来源: 互联网

标签:http-request c multithreading libcurl


我有一个关于使用libcurl(C)执行并行HTTP请求的安全性的问题.在阅读这个问题时,请记住我对HTTP请求的了解有限.

基本上,假设我有两个(或更多)线程,每个线程每秒发出一次HTTP请求. (所有请求都是在同一台服务器上).我的程序(或其他什么?)如何跟踪HTTP响应属于哪个步骤?我的意思是,我可以确定如果请求A是从线程1发送的,并且同时从线程2请求B,并且同时恢复响应,则正确的响应(响应A)将转到线程1并且响应B到线程2?

请原谅我对这件事的无知.

谢谢.

解决方法:

首先libcurl是thread safe

libcurl is designed and implemented entirely thread safe

正如本官方文档所指出的,您需要做的就是:

Never share libcurl handles between multiple threads. You should only use one handle in one single thread at any given time.

此外,还有这个official FAQ entry提供了更多的精确度,例如,如果您计划使用SSL:

If you use a OpenSSL-powered libcurl in a multi-threaded environment, you need to provide one or two locking functions

正如您所看到的,有一个官方示例说明了简单句柄的多线程使用:请参阅multithread.c

/* This is the callback executed when a new threads starts */
static void *pull_one_url(void *url)
{
  CURL *curl;

  curl = curl_easy_init();
  curl_easy_setopt(curl, CURLOPT_URL, url);
  curl_easy_perform(curl); /* ignores error */ 
  curl_easy_cleanup(curl);

  return NULL;
}

/* ... */

/* This is the main loop that creates `NUMT` threads for parallel fetching */
for(i=0; i< NUMT; i++) {
    error = pthread_create(&tid[i],
                           NULL, /* default attributes please */ 
                           pull_one_url,
                           (void *)urls[i]);
  /* ... */
}

所以请随意尝试这个例子.

最后请记住,libcurl还提供了一个所谓的multi interface,它使用单个线程提供多个传输.根据您的使用情况,您可能会发现它很方便.

编辑

关于OpenSSL多线程,有一些特定的官方示例可能会有所帮助:

> opensslthreadlock.c
> threaded-ssl.c

标签:http-request,c,multithreading,libcurl
来源: https://codeday.me/bug/20191002/1842481.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有