Schrift
[thread]6290[/thread]

package - hash/array/var - input/export?



<< >> 10 Einträge, 1 Seite
Gast Gast
 2004-05-25 15:09
#82731 #82731
hi,
warte z.z. noch auf meinen aktivierungscode aber zeit ist geld *g* deshalb stelle ich schon mal meine frage

ich nehme den folgenden code mal als bsp von cpan, das was ich daraus gemacht ist doch etwas komplexer und für die frage nicht wichtig

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  #
# provide subclassed UserAgent to override on_connect, on_failure and
# on_return methods
#
package myUA;

use Exporter();
use LWP::Parallel::UserAgent qw(:CALLBACK);
@ISA = qw(LWP::Parallel::UserAgent Exporter);
@EXPORT = @LWP::Parallel::UserAgent::EXPORT_OK;

# redefine methods: on_connect gets called whenever we're about to
# make a a connection
sub on_connect {
my ($self, $request, $response, $entry) = @_;
print "Connecting to ",$request->url,"\n";
}

# on_failure gets called whenever a connection fails right away
# (either we timed out, or failed to connect to this address before,
# or it's a duplicate). Please note that non-connection based
# errors, for example requests for non-existant pages, will NOT call
# on_failure since the response from the server will be a well
# formed HTTP response!
sub on_failure {
my ($self, $request, $response, $entry) = @_;
print "Failed to connect to ",$request->url,"\n\t",
$response->code, ", ", $response->message,"\n"
if $response;
}

# on_return gets called whenever a connection (or its callback)
# returns EOF (or any other terminating status code available for
# callback functions). Please note that on_return gets called for
# any successfully terminated HTTP connection! This does not imply
# that the response sent from the server is a success!
sub on_return {
my ($self, $request, $response, $entry) = @_;
if ($response->is_success) {
print "\n\nWoa! Request to ",$request->url," returned code ", $response->code,
": ", $response->message, "\n";
print $response->content;
} else {
print "\n\nBummer! Request to ",$request->url," returned code ", $response->code,
": ", $response->message, "\n";
# print $response->error_as_HTML;
}
return;
}

package main;
use HTTP::Request;

# shortcut for demo URLs
my $url = "http://localhost/";

my $reqs = [
HTTP::Request->new('GET', $url),
HTTP::Request->new('GET', $url."homes/marclang/"),
];

my $pua = myUA->new();

foreach my $req (@$reqs) {
print "Registering '".$req->url."'\n";
$pua->register ($req);
}
my $entries = $pua->wait(); # responses will be caught by on_return, etc


so meine problem ist das ich bisher noch nicht den modullen durch package einen neuen namen geben muss, wenn man das so nennen kann. dies ist hier aber nötig um die funktionen zu überschreiben. so nun mein eigentliches problem ... wie ist es möglich daten (vars, arrays, hashes) die in main definiert wurden in myUA zu nutzen und zwar in den funktionen, in meinen fall bei on_return. z.b. wenn jeder url verschiedene extra informationen zugeordnet werden sollen.

natürlich wäre es dafür einfacher das socket modull zu<verwenden, welches mir sogar lieber wäre, aber ich würde nur ungern auf multithreaded requests verzichten.

ich hoffe ich habe mich einiger maßen verständlich ausgedrückt. bin dankbar für jede sinnvolle antwort
coax
 2004-05-25 17:36
#82732 #82732
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Guest,25.05.2004, 13:09]wie ist es möglich daten (vars, arrays, hashes) die in main definiert wurden in myUA zu nutzen und zwar in den funktionen, in meinen fall bei on_return.[/quote]
Zum Beispiel in dem du den vollqualifizierten Variablennamen verwendest: $main::varname. Das sollte sich aber denke ich mal besser loesen lassen.

Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
sri
 2004-05-25 20:35
#82733 #82733
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn es dir um performance geht ist Parallel::UserAgent die absolut schlechteste Wahl, da es langsamer als ALLE Alternativen ist.

Ich hab da schonmal sehr umfangreiche Benchmarks bei den PerlMonks gepostet. (Leider grad keinen Link parat)

Wenn es dir wirklich nur um HTTP GET geht ist HTTP::MHTTP die schnellste Lösung.

Solltest du allerdings etwas Wert auf eine saubere API und/oder erweiterte Features legen würde ich dir mein WWW::Curl::Lite empfehlen.

Wenn du aber keine C/XS erweiterungen bauen kannst, ist LWP::Simple die beste wahl.\n\n

<!--EDIT|sri|1085503572-->
devil_86
 2004-05-26 10:34
#82734 #82734
User since
2004-05-25
12 Artikel
BenutzerIn
[default_avatar]
@coax, danke, das klingt logisch :), wie gesagt hab bis jetzt nur noch nicht mit packages in dem sinne gearbeitet

@sri, also das script soll mehrere tausend requests machen, daher hab mich mir schon eine schnellere abarbeitung dieser durch parallele anfragen versprochen. nehmen wir mal an ich verzichte darauf, da wäre doch Socket.pm (mit HTTP bin ich vertraut) wahrscheinlich schneller als modulle die mir die arbeit abnehmen (meisten mehr als man braucht), oder? und die meisten requests werden wahrscheinlich auch mit POST getätigt
sri
 2004-05-26 12:31
#82735 #82735
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=devil_86,26.05.2004, 08:34]@sri, also das script soll mehrere tausend requests machen, daher hab mich mir schon eine schnellere abarbeitung dieser durch parallele anfragen versprochen. nehmen wir mal an ich verzichte darauf, da wäre doch Socket.pm (mit HTTP bin ich vertraut) wahrscheinlich schneller als modulle die mir die arbeit abnehmen (meisten mehr als man braucht), oder? und die meisten requests werden wahrscheinlich auch mit POST getätigt[/quote]
Dann würde ich WWW::Curl::Lite empfehlen, oder wenn das zu schwer zu installieren ist LWP::Simple(LWP::Simple ist bereits eine minimale Socket lösung und erheblich schneller als LWP::UserAgent).
devil_86
 2004-05-26 12:47
#82736 #82736
User since
2004-05-25
12 Artikel
BenutzerIn
[default_avatar]
LWP::Simple hatte ich mir auch schon angeguckt, aber ich glaub das war nur für GET requests, außerdem muss ich auch die http header setzen können

aber ich kann mir nicht vorstellen das Curl oder LWP schneller sind alls wenn ich das den http header selber zusammensetze und mit Socket schicke :-/. der einzigste grund für mich LWP zu nehmen sind die parallelen requests, eigentlich bevorzuge ich es meine requests selber zuschreiben, ich bin der meinung da hat man auch mehr freiheiten

ALSO:
wenn ich nach hause komme werde ich erstmal den rat von coax ausprobieren.
ich denke schon das parallele requests bei der anzahl von urls was bringt. wenn nicht werde ich noch was probieren was mir gestern abend im bett noch eingefallen ist *g*. und wenn das nichts wird und ich auf multithreaded request verzichten muss werden ich wohl wieder zum Socket.pm greifen.

also danke an coax und sri ;)
sri
 2004-05-26 14:55
#82737 #82737
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=devil_86,26.05.2004, 10:47]LWP::Simple hatte ich mir auch schon angeguckt, aber ich glaub das war nur für GET requests, außerdem muss ich auch die http header setzen können

aber ich kann mir nicht vorstellen das Curl oder LWP schneller sind alls wenn ich das den http header selber zusammensetze und mit Socket schicke :-/. der einzigste grund für mich LWP zu nehmen sind die parallelen requests, eigentlich bevorzuge ich es meine requests selber zuschreiben, ich bin der meinung da hat man auch mehr freiheiten
[/quote]
Wie oben erwähnt LWP::Simple ist...simpel...

WWW::Curl::Lite ist ein einfaches Interface zu WWW::Curl was wiederum ein XS binding zu libcurl ist.

libcurl ist eine C bibliothek die sehr viel schneller als perl sockets ist und nebenbei threadsafe parrallele requests machen kann, und allerlei andere spielereien. ;)\n\n

<!--EDIT|sri|1085569091-->
devil_86
 2004-05-26 15:05
#82738 #82738
User since
2004-05-25
12 Artikel
BenutzerIn
[default_avatar]
ok danke, das hört sich ja auch nicht schlecht an :). cURL ist mir schon von php und linux ein begriff, werde mir mal das perl modul dazu anschauen ;)
devil_86
 2004-05-26 15:33
#82739 #82739
User since
2004-05-25
12 Artikel
BenutzerIn
[default_avatar]
hab mich schon gewundert warum ich das nicht bei cpan gefunden habe :D, ist ja anscheinend von dir, ich glaub ich bin jetzt schon überzeugt, werd's mir mal zuhause an schauen, was ich bis jetzt so auf deiner hp gesehen habe sah schon sehr interessant aus, könnte wirklich ein guter ersatz für LWP sein und wenn es dann noch schneller ist :p , wirklich ein guter tipp ;)
sri
 2004-05-26 16:02
#82740 #82740
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ist noch nich auf CPAN weil wir die dazu passende Version von WWW::Curl (3.0) noch nicht ganz fertig haben. :(

Mein CO-Maintainer will unbedingt zu allen bisherigen Versionen kompatibel sein, das hält verdammt auf, zumal er in den letzten Wochen nix dafür getan hat. ;)
<< >> 10 Einträge, 1 Seite



View all threads created 2004-05-25 15:09.