Datastar-SSE
view release on metacpan or search on metacpan
eg/index.cgi view on Meta::CPAN
#!/usr/bin/perl
use lib '../lib';
use CGI;
use Datastar::SSE;
use JSON;
my $q = CGI->new;
if ($q->request_method eq 'GET') {
my $signals = +{ counter => 0 };
print $q->header('text/html');
$q->print(q{
<html>
<head>
<script type="module" src="https://cdn.jsdelivr.net/gh/starfederation/datastar@v1.0.0-beta.11/bundles/datastar.js"></script>
</head>
<body data-signals='}.JSON->new->encode($signals).q{'>
<div>Counter: <span data-text="$counter"></span></div>
<div><button data-on-click='@post("index.cgi?action=plus")'>increment</button>
<button data-on-click='@post("index.cgi?action=minus")'>decrement</button></div>
</body></html>});
} else {
print $q->header(
-type => 'text/event-stream',
-cache_control => 'no-cache',
-connection => 'keep-alive',
-keep_alive => 'timeout=300, max=100000'
);
my $action = $q->url_param('action');
my $signals = JSON->new->decode(scalar $q->param('POSTDATA'));
$signals->{counter} = $action eq 'plus' ? $signals->{counter} + 1 : $signals->{counter} - 1;
$q->print( Datastar::SSE->merge_signals( $signals ) );
}
( run in 2.950 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )