SockJS
view release on metacpan or search on metacpan
t-vendor/app.psgi view on Meta::CPAN
BEGIN {
my $root = File::Basename::dirname(__FILE__);
unshift @INC, File::Spec->catfile($root, '..', 'lib');
}
use SockJS;
my %options = (
response_limit => $ENV{TEST_PROTOCOL} ? 4096 : 128 * 1024,
sockjs_url => '/lib/sockjs.js'
);
my $echo = sub {
my ($session) = @_;
$session->on(
'data' => sub {
my $session = shift;
$session->write(@_);
}
);
};
my $root = File::Basename::dirname(__FILE__);
builder {
mount '/config.js' => sub {
my $body = <<'EOF';
var server_opts = {
sockjs_url: 'http://localhost:8081/lib/sockjs.js'
};
var client_opts = {
url: 'http://localhost:8081',
sockjs_opts: {
devel: true,
debug: true,
// websocket:false
info: {cookie_needed:false}
}
};
EOF
[200, ['Content-Type' => 'application/javascript'], [$body]];
};
mount '/simple.txt' => sub {
my $body = ('a' x 2048) . "\nb\n";
[
200,
[
'Content-Type' => 'text/plain',
'Access-Control-Allow-Origin' => '*'
],
[$body]
];
};
mount '/streaming.txt' => sub {
my $env = shift;
my $t;
return sub {
my $respond = shift;
my $writer = $respond->(
[
200,
[
'Content-Type' => 'text/plain',
'Access-Control-Allow-Origin' => '*'
]
]
);
$writer->write('a' x 2048);
$writer->write("\n");
$t = AnyEvent->timer(
after => .2,
cb => sub {
$writer->write("b\n");
$writer->close;
}
);
}
};
mount '/lib/sockjs.js' => sub {
my $body = do {
local $/;
open my $fh, '<', "$root/sockjs-0.3.2.min.js" or die $!;
<$fh>;
};
[200, ['Content-Type' => 'application/javascript'], [$body]];
};
mount '/echo' => SockJS->new(%options, handler => $echo);
mount '/disabled_websocket_echo' =>
SockJS->new(%options, handler => $echo, websocket => 0);
mount '/cookie_needed_echo' =>
SockJS->new(%options, handler => $echo, cookie => 1);
mount '/amplify' => SockJS->new(
%options,
handler => sub {
my $session = shift;
$session->on(
'data',
sub {
my $session = shift;
for my $m (@_) {
my $n = int $m;
$n = ($n > 0 && $n < 19) ? $n : 1;
( run in 1.912 second using v1.01-cache-2.11-cpan-39bf76dae61 )