forked from flynn-archive/strowger
/
server.go
53 lines (46 loc) · 1.08 KB
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package main
import (
"flag"
"log"
"net/http"
"strings"
"github.com/flynn/go-discover/discover"
"github.com/flynn/rpcplus"
)
type Server struct {
*HTTPFrontend
}
func (s *Server) ListenAndServe(quit <-chan struct{}) {
go s.HTTPFrontend.serve()
go s.HTTPFrontend.syncDatabase()
<-quit
// TODO: unregister from service discovery
// TODO: stop frontends gracefully
}
func main() {
rpcAddr := flag.String("rpcaddr", ":1115", "rpc listen address")
httpAddr := flag.String("httpaddr", ":8080", "http frontend listen address")
flag.Parse()
var s Server
f, err := NewHTTPFrontend(*httpAddr)
if err != nil {
log.Fatal(err)
}
s.HTTPFrontend = f
rpcplus.Register(&Router{s})
rpcplus.HandleHTTP()
go http.ListenAndServe(*rpcAddr, nil)
d, err := discover.NewClient()
if err != nil {
log.Fatal(err)
}
if hostPort := strings.SplitN(*rpcAddr, ":", 2); hostPort[0] != "" {
err = d.RegisterWithHost("flynn-strowger-rpc", hostPort[0], hostPort[1], nil)
} else {
err = d.Register("flynn-strowger-rpc", hostPort[1], nil)
}
if err != nil {
log.Fatal(err)
}
s.ListenAndServe(nil)
}