serverino 0.4.7
Small and ready-to-go http server
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
serverino
- Ready-to-go http server
- Cross-platform (Linux/Windows/MacOS)
- Multi-process
- Dynamic number of workers
- Zero dependencies
- Build & start your project in a few seconds
Quickstart
dub init your_fabulous_project -t serverino
cd your_fabulous_project
dub run
A simple webserver in just three lines
import serverino;
mixin ServerinoMain;
void hello(const Request req, Output output) { output ~= req.dump(); }
Documentation you need
- Tips - Some snippets you want to read
- Request - What user asked
- Output - Your reply
- ServerinoConfig - Server configuration
Defining more than one endpoint
Every function marked with ```@endpoint``` is called until one writes something to output
The calling order is defined by `@priority
`
import serverino;
mixin ServerinoMain;
// This function will never block the execution of other endpoints since it doesn't write anything to output
// In this case `output` param is not needed and this works too: `@priority(10) @endpoint void logger(Request req)`
@priority(10) @endpoint void logger(Request req, Output output)
{
import std.experimental.logger; // std.experimental.logger works fine!
log(req.uri);
}
// We accept only GET request in this example
@priority(5) @endpoint void checkMethod(Request req, Output output)
{
if (req.method != Request.Method.Get)
{
// We set a 405 (method not allowed) status here.
// If we change the output no other endpoints will be called.
output.status = 405;
}
}
// This endpoint (default priority == 0) handles the homepage
// Request and Output can be used in @safe code
@safe
@endpoint void hello(Request req, Output output)
{
// Skip this endpoint if uri is not "/"
if (req.uri != "/") return;
output ~= "Hello world!";
}
// This function will be executed only if `hello(...)` doesn't write anything to output.
@priority(-10000) @endpoint void notfound(const Request req, Output output)
{
output.status = 404;
output ~= "Not found";
}
@onServerInit UDA
Use `@onServerInit
` to configure your server
// Try also `setup(string args[])` if you need to read arguments passed to your application
@onServerInit ServerinoConfig setup()
{
ServerinoConfig sc = ServerinoConfig.create(); // Config with default params
sc.addListener("127.0.0.1", 8080);
sc.addListener("127.0.0.1", 8081);
sc.addListener!(ServerinoConfig.ListenerProtocol.IPV6)("localhost", 8082); // IPV6
sc.setWorkers(2);
// etc...
return sc;
}
Shielding the whole thing
I would not put serverino into the wild. For using in production I suggest shielding serverino under a full webserver.
Using nginx
It's pretty easy. Just add these lines inside your nginx configuration:
server {
listen 80 default_server;
listen [::]:80 default_server;
location /your_path/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8080;
}
...
...
}
If you want to enable keepalive (between nginx and serverino) you must use an upstream:
upstream your_upstream_name {
server localhost:8080;
keepalive 64;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
location /your_path/ {
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://your_upstream_name;
}
...
...
}
Using apache2
Enable proxy module for apache2:
sudo a2enmod proxy
sudo a2enmod proxy_http
Add a proxy in your virtualhost configuration:
<VirtualHost *:80>
ProxyPass "/" "http://localhost:8080/"
...
</VirtualHost>
- Registered by Andrea Fontana
- 0.4.7 released a year ago
- trikko/serverino
- MIT
- Copyright © 2022-2023, Andrea Fontana
- Authors:
- Sub packages:
- serverino:init-exec, serverino:test-1
- Dependencies:
- serverino:init-exec
- Versions:
-
0.7.13 2024-Dec-18 0.7.12 2024-Dec-16 0.7.11 2024-Sep-10 0.7.10 2024-Jul-13 0.7.9 2024-Jun-08 - Download Stats:
-
-
2 downloads today
-
24 downloads this week
-
53 downloads this month
-
1110 downloads total
-
- Score:
- 3.3
- Short URL:
- serverino.dub.pm