ff vlug voorbeeld code dan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| sub start_session {
my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
while ( keys( %{ $heap->{task} } ) < MAX_CONCURRENT_TASKS ) {
my $next_task = shift @tasks;
last unless defined $next_task;
my $session = ($task_cnt - $#tasks);
print STDERR "Started session: $session (".(keys %{$heap->{task}}).")\n";
my $task = POE::Wheel::Run->new
( Program => sub { do_session($next_task, $session) },
StdoutFilter => POE::Filter::Reference->new(),
StdoutEvent => "task_result",
StderrEvent => "task_debug",
CloseEvent => "task_done",
);
$heap->{task}->{ $task->ID } = $task;
$heap->{"t".$task->ID} = $session;
}
} |
Dit doet start een nieuwe webuser-sessie. Iedere sessie volgt een random click-path door de te testen website. Na iedere click wordt er een aantal seconden (random tussen x en y) gewacht tot de volgende click. Mbv POE kunnen deze 'users' ook daadwerkelijk naast elkaar bestaan.
Het probleem is echter als volgt;
* Ik wil mijn website met 500 users pesten.
* Er mogen er maar 300 tegelijk bezig zijn (MAX_CONCURRENT_TASKS)
* Het aantal clicks dat tijdens het opstarten van de stress-test veroorzaakt wordt is moordend.
Hoe kan je dit meer spatieren, liefst mbv POE zelf.
Ik heb intussen wel een oplossing gefabriekt, maar daar wordt ik nog niet erg gelukkig van.
code:
1
2
3
4
5
6
7
| my $max = 1;
while keys < $max {
$max = ($task_cnt - $#tasks);
$max *= 2;
$max = MAX_CONCURRENT_TASKS if $max > MAX_CONCURRENT_TASKS;
$max = $prev if ( $max > keys %{ $heap->{task} } and $prev ne undef );
... |
[
Voor 8% gewijzigd door
Verwijderd op 27-03-2003 17:12
]