Async::Microservice::Time - example time async microservice
# 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"
This is an example asynchronous http micro service using Async::Microservice. View the source code it's minimal.
Just a name, used to identify process and look for OpenAPI documentation.
Path::Router configuration for dispatching
https://time.meon.eu/v1/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" }
https://time.meon.eu/v1/epoch
https://time.meon.eu/v1/sleep?duration=2.5
This is the only parallel processed reponse method (the other ones are pure CPU-only bound) that sleep given (or random) number of seconds and only then returns the request response with when it started and how long it took. Normally this the same as what is in 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
Then try to run together with 100% CPU load:
ab -q -n 10000 -c 50 http://localhost:8085/v1/datetime
Check out Async::Microservice for built-in http response methods.
t/02_Async-Microservice-Time.t for an example how to test this service.
To install Async::Microservice, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Async::Microservice
CPAN shell
perl -MCPAN -e shell install Async::Microservice
For more information on module installation, please visit the detailed CPAN module installation guide.