Mehrere HTTP-Anfragen asynchron machen

9
%Vor%

Dieser Code funktioniert synchron. Erste Anfrage, zweite, dritte. Ich möchte alle Anfragen asynchron senden und urls drucken, nachdem alle fertig sind.

Was ist der beste Weg, es zu tun? Ist Fiber dafür geeignet?

    
NVI 06.09.2013, 22:46
quelle

7 Antworten

12

Hier ist ein Beispiel mit Threads.

%Vor%     
August Lilleaas 24.01.2010 21:08
quelle
12

Ich habe das gerade gesehen, ein Jahr und ein bisschen später, aber hoffentlich nicht zu spät für einen Googler ...

Typhoeus ist bei weitem die beste Lösung dafür. Es wickelt libcurl in einer wirklich eleganten Art und Weise. Sie können die max_concurrency auf ungefähr 200 setzen, ohne dass sie erstickt.

In Bezug auf Timeouts, wenn Sie Typhoeus ein :timeout -Flag übergeben, wird nur ein Timeout als Antwort registriert ... und dann können Sie die Anfrage sogar in eine andere Hydra zurücklegen, um es erneut zu versuchen, wenn Sie möchten / p>

Hier ist Ihr Programm mit Typhoeus umgeschrieben. Hoffentlich hilft das jedem, der später auf diese Seite kommt!

%Vor%     
Joshua Penman 05.01.2015 01:54
quelle
1

Dies kann mit der C-Bibliothek cURL erfolgen. Es existiert eine Ruby-Bindung für diese Bibliothek, aber diese Funktion scheint diese Funktion nicht standardmäßig zu unterstützen. Es sieht jedoch so aus, als gäbe es einen Patch , der hinzugefügt / repariert wird (Beispielcode ist auf der Seite verfügbar). Ich weiß, das hört sich nicht gut an, aber es könnte einen Versuch wert sein, wenn es keine besseren Vorschläge gibt.

    
kloffy 24.01.2010 20:12
quelle
1

Ich habe einen ausführlichen Blogbeitrag zu diesem Thema geschrieben, der eine Antwort enthält, die der von August geposteten ähnlich ist - aber mit ein paar wichtigen Unterschieden: 1) Verfolgt alle Thread-Referenzen im "Thread" -Array. 2) Verwendet "Join" -Methode, um Threads am Ende des Programms zu binden.

%Vor%

Das vollständige Tutorial (und einige Informationen zur Performance) finden Sie hier: Ссылка

    
Zach Alam 02.04.2016 17:35
quelle
0

Es hängt davon ab, was Sie nach der Funktion danach machen wollen. Sie können es mit einfachen Threads tun:

siehe: Ссылка

    
Beffa 24.01.2010 20:18
quelle
0

Sie könnten einen anderen Thread ausführen, der jedes der Net :: HTTP.get ausführt. Und warte nur auf das Ende aller Threads.

BTW Drucken URLs werden sowohl den Link als auch den Inhalt drucken.

    
pgmura 24.01.2010 20:24
quelle
0

Das work_queue -Symbol ist der einfachste Weg, um Aufgaben asynchron und gleichzeitig in Ihrer Anwendung auszuführen.

%Vor%     
Miguel Fonseca 19.06.2015 19:52
quelle