Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3154[/thread]

Data Sharing / Zaehlen der Abrufe: IPC::Shareable unter mod_perl handler?!?



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Airport1
 2005-07-22 19:28
#31130 #31130
User since
2005-07-10
24 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo Gemeinde,

habe ein Script welches als mod_perl Handler
sub handler()
laeuft und fuer jeden spezifischen Aufruf Daten aus der DB zieht und ein passendes Image ausliefert, tut wunderbar.

Nun moechte ich "mitzaehlen", wie oft das Script bzw. ein Image abgerufen wird. Mir wurde als Tipp IPC::Shareable genannt, was auch wunderbar standalone als normales Perl Script funktioniert, d.h. wenn ich darin z.B. $counter++; aufrufe dann wird der tatsaechlich pro Aufruf des Scripts erhoeht.

Nur, sobald ich dass nun in das mod_perl Script einbaue, funzt das zwar weiterhin, aber er scheint DORT die Variable nicht hochzuzaehlen? Muss ich bei mod_perl bezuegl. IPC::Shareable irgendwas besonderes beachten? Ich habe die Deklaration

my $variable
und das "tie" ausserhalb, also nicht im sub handler. im sub handler zaehle ich dann hoch.

Vielleicht gibts auch ne ganz andere Loesung?
renee
 2005-07-22 19:56
#31131 #31131
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest Dir vielleicht mal http://www.farid-hajji.net/books....rl.html durchlesen (ungefähr in der Mitte)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Airport1
 2005-07-22 20:20
#31132 #31132
User since
2005-07-10
24 Artikel
BenutzerIn
[Homepage] [default_avatar]
Meinst Du den folgenden Abschnitt, habe nun use vars verwendet, zaehlt aber immer noch nicht hoch?:

Verwenden Sie echte globale Variablen, statt lexikalisch globale Variablen. Damit sie von use strict; akzeptiert werden, sollten Sie diese globalen Variablen mit use vars deklarieren:

#!/usr/local/bin/perl -w
use strict;
use vars qw($realglobal); # Echte globale Variable
$realglobal = param("myname");
renee
 2005-07-22 20:26
#31133 #31133
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Sorry, habe mich da vertan, die globelan Variablen werden nur zwischen den Modulen packages geshart, die in einem Interpreter laufen.

So musst Du threads::shared::share benutzen (jedenfalls laut mod_perl userguide)...

edit: welches mod_perl verwendest Du??\n\n

<!--EDIT|renee|1122049718-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Airport1
 2005-07-22 20:38
#31134 #31134
User since
2005-07-10
24 Artikel
BenutzerIn
[Homepage] [default_avatar]
Laut http://marc.theaimsgroup.com/?l=apac....698&w=2 gibts dann aber Probs jenseits der 64 Threads , oder?

Scheint ja ne Menge Moeglichkeiten zu geben Daten zu sharen, nur nirgends ein Beispiel dazu, schnueff ;)

Apache Signatur ist:
Server: Apache/2.0.52 (Debian GNU/Linux) PHP/4.3.10-13 mod_ssl/2.0.52 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4

Ich weiss das ist nicht die aktuellste mod_perl, die hatte ich schon versucht zu installieren aber nicht hinbekommen, die in der Sig ist die aktuellste im stable Zweig von Debian.
pq
 2005-07-23 00:01
#31135 #31135
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also einen homepage counter würde ich immer mit ner simplen datei und locking implementieren.
solange du nur einen webserver hast, ist das doch prima.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Airport1
 2005-07-24 16:58
#31136 #31136
User since
2005-07-10
24 Artikel
BenutzerIn
[Homepage] [default_avatar]
Gibts dafuer irgendwo einen Beispiel-Code? Und ist das am effizientesten? Das Image wird naemlich schon sehr haeufig abgerufen, moechte da kein Nadeloehr reinpflanzen ;)\n\n

<!--EDIT|Airport1|1122209928-->
pq
 2005-07-24 19:28
#31137 #31137
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
es ist ja nicht so, als ob perl eine faq hätte. =)
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
       I still don't get locking.  I just want to increment the
      number in the file.  How can I do this?

      Didn't anyone ever tell you web-page hit counters were
      useless?  They don't count number of hits, they're a waste
      of time, and they serve only to stroke the writer's van-
      ity.  It's better to pick a random number; they're more
      realistic.

      Anyway, this is what you can do if you can't help your-
      self.

     use Fcntl qw(:DEFAULT :flock);
     sysopen(FH, "numfile", O_RDWR|O_CREAT)       or die "can't opennumfile: $!";
     flock(FH, LOCK_EX)                           or die "can't flock numfile: $!";
     $num = <FH> || 0;
     seek(FH, 0, 0)                               or die "can't rewind numfile: $!";
      truncate(FH, 0)                              or die "can't truncate numfile: $!";
     (print FH $num+1, "\n")                      or die "can't write numfile: $!";
     close FH                                     or die "can't close numfile: $!";

      Here's a much better web-page hit counter:

          $hits = int( (time() - 850_000_000) / rand(1_000) );


probier's erst mal aus.
wenn dir das zuviel wird, dann erstell dir eine globale variable, also pro apache-
prozess, und zähl da hoch. bei 100 schreibst du in die counterdatei (+100) und
setzt den counter im apache wieder zurück.
bei bedarf kannst du die 100 beliebig anpassen.\n\n

<!--EDIT|pq|1122218998-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Airport1
 2005-07-25 18:38
#31138 #31138
User since
2005-07-10
24 Artikel
BenutzerIn
[Homepage] [default_avatar]
Fantastische Idee, das mit nur alle 100 reinschreiben. Hab allerdings in meiner Apache Config drin dass jedes Child nur X (glaube 150) Requests bearbeitet bevor es "erneuert" wird. Wegen moeglicher Speicherlecks. D.h. da koennten mir dann einige Zaehlungen verloren gehen. Aber die Idee ist spitze :)
pq
 2005-07-25 20:13
#31139 #31139
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wie gesagt, probier's erst mal aus.
ansonsten:
END { schreibe datei }
dann schreibt dein handler beim sterben noch schnell die datei.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2005-07-22 19:28.