PROBLEMA Multiple richieste get con lib curl C

federikowsky

Nuovo Utente
6
0
vorrei fare un client C che fa chiamate API asincrone con lib curl e salvare le risposte, le chiamate sono circa un centinaio contemporaneamente. sono 4 giorni che cerco tutorial su internet e esempi per curl_multi_* e curl_multi_socket con epoll (uso linux) ma non sembra esistano o a quanto pare sembro l'unico interessato a fare una cosa del genere in C. Ho guardato anche gli esempi della documentazione ufficiale, ma usa al massimo 2 connessioni in contemporanea e per fare ciò dichiara due variabili e chiama curl_easy_init(), pero, il problema è che le richieste che fa il programma non sono un numero preciso quindi non posso dichiarare a priori un numero di variabili (anche se fosse non è fattibile dichiarare 100 variabili). Invece questo esempio di curl_multi_socket con epoll per me essendo alle prime armi è difficile da capire e da replicare per il mio caso senza una spiegazione su come funziona. C'è qualcuno che può farmi un esempio di codice su come usare curl_multi_* per più connessioni simultanee per avere una base su cui partire? sarebbe molto apprezzato.
 

Mario Niola

Nuovo Utente
43
9
CPU
Pentium G4500 6th Gen (Skylake)
Dissipatore
Intel LGA 1151
Scheda Madre
Gigabyte H110M-S2H
HDD
Wester Digital WD10EZEX 1 TB
RAM
Hyperx Fury DDR4 2133mhz 1x8GB
GPU
Intel HD 530 (grafica integrata)
Audio
Realtek ALC887 (audio integrato)
Monitor
Acer 22'' 1920x1080
PSU
Cooler Master 600W
Case
Cooler Master Masterbox lite 5
Periferiche
Tastiera PS2 e mouse del supermercato
Net
Fastweb
OS
Gnu/Linux Debian 10 (Buster) e Gnome 3.38
1) Non usare curl_multi_socket (è deprecato) come è scritto qui
2) Usa (al massimo) curl_multi_socket_action (ci sono alcuni esempi qui)
3) Non ho capito di preciso cosa devi fare. Perché fare tutte ste chiamate?

Se hai molti dati da inviare, in genere le tecniche di implementazione client-server prevedono che il programma client organizzi i dati da inviare in strutture (struct, array, ecc...) in formato JSON e poi si fa una chiamata inviando i suddetti dati e usando la relativa funzione (inserendo gli header che servono al server per validare, accettare e processare la chiamata).
Se vuoi usare curl per scaricare video in streaming (che adesso sono "spezzettati" in vari file .TS, e quindi richiedono il merging in un unico MP4 dopo il download, magari con ffmpeg), puoi provare ad integrare tool già esistenti (come youtube-dl, ad esempio) senza dover creare un programma daccapo.

La documentazione di curl è sterminata. Che devi fare di preciso?
 

bigendian

Utente Attivo
749
431
OS
Linux
non vedo problemi a fare 100 richieste contemporanee (contemporanee si fa per dire) in C. Pero ti serve potenza di calcolo e banda di rete.
Spiegaci cosa devi fare di preciso.
 
  • Mi piace
Reazioni: Mario Niola

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
non vedo problemi a fare 100 richieste contemporanee (contemporanee si fa per dire) in C. Pero ti serve potenza di calcolo e banda di rete.
Spiegaci cosa devi fare di preciso.

Lascio aperto momentaneamente ma dubito avremo risposte. Il topic è di 9 mesi fa.
 
  • Mi piace
Reazioni: Mursey

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!