anyhttp/README.md

78 lines
1.7 KiB
Markdown
Raw Normal View History

2023-09-11 21:01:20 -04:00
Create http server listening on unix sockets and systemd socket activated fds
2023-04-20 16:31:35 -04:00
## Quick Usage
2023-04-25 09:14:16 -04:00
go get go.balki.me/anyhttp
2023-04-20 16:31:35 -04:00
Just replace `http.ListenAndServe` with `anyhttp.ListenAndServe`.
```diff
- http.ListenAndServe(addr, h)
+ anyhttp.ListenAndServe(addr, h)
```
2023-04-20 17:56:44 -04:00
## Address Syntax
2023-04-20 16:31:35 -04:00
2023-04-20 17:56:44 -04:00
### Unix socket
2023-04-20 16:31:35 -04:00
Syntax
unix/<path to socket>
Examples
unix/relative/path.sock
unix//var/run/app/absolutepath.sock
2023-04-20 17:56:44 -04:00
### Systemd Socket activated fd:
2023-04-20 16:31:35 -04:00
Syntax
sysd/fdidx/<fd index starting at 0>
sysd/fdname/<fd name set using FileDescriptorName socket setting >
Examples:
# First (or only) socket fd passed to app
sysd/fdidx/0
# Socket with FileDescriptorName
sysd/fdname/myapp
# Using default name
sysd/fdname/myapp.socket
2023-04-20 17:56:44 -04:00
### TCP port
2023-04-20 16:31:35 -04:00
2023-09-11 21:01:20 -04:00
If the address is a number less than 65536, it is assumed as a port and passed
as `http.ListenAndServe(":<port>",...)` Anything else is directly passed to
`http.ListenAndServe` as well. Below examples should work
2023-04-20 16:31:35 -04:00
:http
:8888
127.0.0.1:8080
2023-04-25 09:14:16 -04:00
2023-09-11 21:01:20 -04:00
## Idle server auto shutdown
When using systemd socket activation, idle servers can be shut down to save on
resources. They will be restarted with socket activation when new request
arrives. Quick example for the case. (Error checking skipped for brevity)
```go
addrType, httpServer, done, _ := anyhttp.Serve(addr, idle.WrapHandler(nil))
if addrType == anyhttp.SystemdFD {
idle.Wait(30 * time.Minute)
httpServer.Shutdown(context.TODO())
}
<-done
```
2023-04-25 09:14:16 -04:00
## Documentation
https://pkg.go.dev/go.balki.me/anyhttp
### Related links
* https://gist.github.com/teknoraver/5ffacb8757330715bcbcc90e6d46ac74#file-unixhttpd-go
2023-09-11 21:01:20 -04:00
* https://github.com/coreos/go-systemd/tree/main/activation