Re:The Simplicity of Single-File Golang Deployments
by dividuum on Wednesday March 22, 2023 @10:17AM
(#35261366)
Can't help with how to implement this, but just to be sure: You should be able to use the same port in multiple instances if you bind those with SO_REUSEPORT. A quick search points to https://github.com/libp2p/go-reuseport for an implementation. Now you just need a mechanism to drain the old process.
[ Parent
| on HN ]
Re:The Simplicity of Single-File Golang Deployments
by joncfoo on Wednesday March 22, 2023 @10:45AM
(#35261831)
Rough psuedocode to do this with the built-in http.Server where startServer(..) would use the reuseport library to create the listener so multiple servers can listen within the same process:
func reloadConfig(config) {
if newServer, err := startServer(config); err != nil {
// gracefully shutdown previous server
// no new connections will go to old server
oldServer.Shutdown(...)
oldServer = newServer
}
}