PAGI-Server
view release on metacpan or search on metacpan
$app; # the file returns the coderef
```
Run it with the bundled `pagi-server` launcher:
```bash
pagi-server --app app.pl --port 5000
curl http://localhost:5000/
# => Hello from PAGI
```
### Running programmatically
You can also drive `PAGI::Server` directly from your own event loop:
```perl
use IO::Async::Loop;
use PAGI::Server;
# If you use Future::IO-based libraries, load this BEFORE them:
use Future::IO::Impl::IOAsync;
my $loop = IO::Async::Loop->new;
my $server = PAGI::Server->new(
app => $app,
host => '127.0.0.1',
port => 5000,
);
$loop->add($server);
$server->listen->get; # start accepting connections
```
## Command-line usage
```
pagi-server [options] [app] [key=value ...]
# Serve a PAGI app file
pagi-server ./app.pl
# Multi-worker, custom port
pagi-server --workers 4 --port 8080 ./app.pl
# Development mode (auto-enables Lint middleware when PAGI-Tools is installed)
pagi-server -E development ./app.pl
# HTTPS
pagi-server --ssl-cert cert.pem --ssl-key key.pem ./app.pl
# HTTP/2 over TLS (experimental)
pagi-server --http2 --ssl-cert cert.pem --ssl-key key.pem ./app.pl
```
Run `perldoc pagi-server` for the full list of options (workers, timeouts,
limits, watermarks, TLS, listeners, and more).
## Examples
The [`examples/`](examples/) directory contains progressively more advanced,
runnable applications â minimal HTTP, streaming with disconnect handling,
request-body draining, a WebSocket echo server, an SSE broadcaster,
lifespan/shared-state, extension-aware streaming, TLS introspection, a job
runner, UTF-8 handling, and a backpressure test harness. Each has its own
`README.md`. Start with [`examples/01-hello-http`](examples/01-hello-http/).
## Documentation
- [`PAGI::Server`](lib/PAGI/Server.pm) â the server class, constructor options,
and operational notes (`perldoc PAGI::Server`).
- [`pagi-server`](bin/pagi-server) â the command-line launcher
(`perldoc pagi-server`).
- [`PAGI::Server::Runner`](lib/PAGI/Server/Runner.pm) â application loading and
server orchestration.
- [`PAGI::Server::Compliance`](lib/PAGI/Server/Compliance.pod) â HTTP/WebSocket
compliance and the built-in security defenses.
- [`Changes`](Changes) â release history.
- [`SECURITY.md`](SECURITY.md) â how to report security issues.
## Relationship to PAGI and PAGI-Tools
PAGI-Server has **no runtime dependency** on other PAGI distributions â the
application runner (`PAGI::Server::Runner`) ships here. The framework-level
toolkit (routers, endpoints, middleware such as `PAGI::Middleware::Lint`, and
the `PAGI::App::*` apps) lives in the separate **PAGI-Tools** distribution and
is used only when present. The specification itself lives in the
[**PAGI**](https://github.com/jjn1056/pagi) distribution.
This distribution was split out of the PAGI distribution; its git history is
preserved from the [original repository](https://github.com/jjn1056/pagi).
## License
Copyright (C) John Napiorkowski.
This library is free software; you can redistribute it and/or modify it under
the terms of the [Artistic License 2.0](https://opensource.org/licenses/Artistic-2.0).
( run in 1.042 second using v1.01-cache-2.11-cpan-6aa56a78535 )