Async-Microservice
view release on metacpan or search on metacpan
want_json
content
json_content
METHODS
text_plain(@text_lines)
Send text plain response.
respond($status, $headers, $payload)
Send a PSGI/Plack response.
$headers must be an array reference of header key/value pairs.
If $payload is not a reference, it is sent as plain text by default.
When the request Accept header allows JSON and no explicit Content-Type
header is already present, plain scalar payloads are wrapped
automatically as JSON:
{ "data": "..." }
For error statuses ($status >= 400), scalar payloads are wrapped as:
{ "error": { err_status => ..., err_msg => ... } }
If $payload is a reference, it is serialized as JSON. When JSONP is
enabled and a valid callback parameter is present, the response is
emitted as application/javascript instead of application/json.
redirect($location_path)
Send redirect.
static_ft($file_name, $content_cb)
Send static file, can be updated/modified using optional callback.
get_pending_req
Returns number of currently pending async requests.
----------------------------------------------------------------------------
NAME
Async::Microservice::Time - example time async microservice
SYNOPSIS
# can be started using:
plackup --port 8085 -Ilib --access-log /dev/null --server Twiggy bin/async-microservice-time.psgi
curl "http://localhost:8085/v1/hcheck" -H "accept: application/json"
curl "http://localhost:8085/v1/epoch" -H "accept: application/json"
curl "http://localhost:8085/v1/datetime?time_zone=local" -H "accept: application/json"
DESCRIPTION
This is an example asynchronous HTTP microservice using
Async::Microservice. View the source code; it's minimal.
METHODS
service_name
Just a name, used to identify process and look for OpenAPI
documentation.
get_routes
Path::Router configuration for dispatching
http response methods
GET_datetime
https://time.meon.eu/v1/datetime
POST_datetime
$ curl -X POST "https://time.meon.eu/v1/datetime" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"epoch\":-42}"
{
"date" : "1969-12-31",
"datetime" : "1969-12-31 23:59:18 +0000",
"day" : "31",
"epoch" : -42,
"hour" : "23",
"minute" : "59",
"month" : "12",
"second" : "18",
"time" : "23:59:18",
"time_zone" : "+0000",
"time_zone_name" : "UTC",
"year" : "1969"
}
GET_epoch
https://time.meon.eu/v1/epoch
GET_sleep
https://time.meon.eu/v1/sleep?duration=2.5
This is the only response method processed in parallel (the other ones
are pure CPU-bound) that sleeps for a given (or random) number of
seconds and only then returns the request response with when it started
and how long it took. Normally this is the same as what is in the
duration parameter, but in case the server is overloaded with requests,
the event loop may call the timer handler much later than the duration.
Try:
ab -n 1000 -c 500 http://localhost:8085/v1/sleep?duration=3
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 259 432.8 21 1033
Processing: 3001 3090 72.5 3061 3253
Waiting: 3001 3090 72.5 3061 3253
Total: 3022 3349 394.1 3155 4065
( run in 0.837 second using v1.01-cache-2.11-cpan-39bf76dae61 )