Compile the example
$ go build -o simple_server examples/simple.go
Run it
$ ./simple_server
2015/03/22 20:03:29 PID: 2710 localhost:4242
Make a request
$ curl http://localhost:4242/hello
WORLD!
Change the handler - eg. replace the ! with a ?
$ go build -o simple_server examples/simple.go
$ kill -1 2710
The server log says something like:
2015/03/22 20:04:10 2710 Received SIGHUP. forking.
2015/03/22 20:04:10 2710 Received SIGTERM.
2015/03/22 20:04:10 2710 Waiting for connections to finish...
2015/03/22 20:04:10 PID: 2726 localhost:4242
2015/03/22 20:04:10 accept tcp 127.0.0.1:4242: use of closed network connection
2015/03/22 20:04:10 Server on 4242 stopped
Make another request
$ curl http://localhost:4242/hello
WORLD?
Create local cert and key file:
go run $GOROOT/src/crypto/tls/generate_cert.go --host=localhost
Compile the example
$ go build -o tls_server examples/tls.go
Run it
$ ./tls_server
2015/03/23 19:43:29 PID: 21710 localhost:4242
Make a request (-k to disable certificate checks in curl)
$ curl -k https://localhost:4242/hello
WORLD!
The rest is like the simple server example: modify the tls.go code, build, send SIGHUP, and make another request.
If you want to time certain actions before or after the server does something based on a signal it received you can hook your own functions into the signal handling of the endless server.
There is a PRE_SIGNAL and a POST_SIGNAL hook dor each signal. These are exposed as lists of parameterless functions:
func preSigUsr1() {
log.Println("pre SIGUSR1")
}
If you want to have this function executed before SIGUSR1 you would add it to the hooks like this:
srv := endless.NewServer("localhost:4244", mux)
srv.SignalHooks[endless.PRE_SIGNAL][syscall.SIGUSR1] = append(
srv.SignalHooks[endless.PRE_SIGNAL][syscall.SIGUSR1],
preSigUsr1)
then build, and run it
$ go build -o hook_server examples/hook.go
$ ./hook_server
2015/04/06 20:32:13 1489 localhost:4244
now send SIGUSR1
kill -SIGUSR1 1489
and you should see something like this
2015/04/06 20:33:07 pre SIGUSR1
2015/04/06 20:33:07 1489 Received SIGUSR1.
2015/04/06 20:33:07 post SIGUSR1
This is probably less useful as you could always run separate servers - but in case you need to start more than one listener from one binary it will also work with endless - pretty much the same way it works in the simple and TLS examples.