|
Algorithm::FloodControl - Limit event processing to count/time ratio. |
Algorithm::FloodControl - Limit event processing to count/time ratio.
use Algorithm::FloodControl;
my $wait = flood_check( 5, 60, 'FLOOD EVENT NAME' );
if( $wait )
{
print "Please wait $wait sec. before requesting this resource again.";
}
else
{
print "Ok, here you are.";
}
``Flood control'' method is used to restrict the number of events to happen or to be processed in specific perion of time. Few examples are: web server can limit requsets number to a page or you may want to receive no more than 10 SMS messages on your GSM Phone per hour. Applications of this method are unlimited.
This module exports several functions:
flood_check() can track several events by name.
Third argument could be omitted. In this case the event name will be constructed from the package name, file name and line number from the calling point. However this is not recommendet unless you need it for very simple program.
The return value is time in seconds that this event must wait to be processed or 0 if event can be processed immediately.
flood_storage() function which returns this
reference and it can be stored with other module like FreezeThaw or Storable.
When restoring you must pass the storage reference as single argument to
flood_storage().
CGI script is very usefull as example because it has all elements of Algorithm::FloodControl use:
#!/usr/bin/perl use strict; use Storable qw( store retrieve ); # used to save/restore the internal data use LockFile::Simple qw( lock unlock ); # used to lock the data file use Algorithm::FloodControl;
my $flood_file = "/tmp/flood-cgi.dat";
lock( $flood_file ); # lock the storage my $FLOOD = retrieve( $flood_file ) if -r $flood_file; # read storage data flood_storage( $FLOOD ) if $FLOOD; # load storage my $wait = flood_check( 5, 60, 'FLOOD TEST CGI' ); # check for flood store( flood_storage(), $flood_file ); # save storage data unlock( $flood_file ); # unlock the file
print "Content-type: text/plain\n\n";
if( $wait )
{
print "Please wait $wait seconds before requesting this page again.\n";
exit;
}
print "Hello, this is main script here\n";
This example is just one of very large number of cases where flood control can be useful. I used it in IRC bots, email notifications, web site updates, etc.
Vladi Belperchinov-Shabanski "Cade"
<cade@biscom.net> <cade@datamax.bg> <cade@cpan.org>
http://cade.datamax.bg
$Id: FloodControl.pm,v 1.1 2004/02/29 03:39:24 cade Exp $
|
Algorithm::FloodControl - Limit event processing to count/time ratio. |