m2go, a Mongrel2 http server for go.
Includes adapter to run Pat.go
Example App:
import ( "github.com/araddon/m2go" "github.com/bmizerany/pat" "io" "log" "net/http" ) func main() { log.SetFlags(log.Ltime | log.Lshortfile) m := pat.New() m.Get("/hello/:name", http.HandlerFunc(hello)) m.Get("/stream", http.HandlerFunc(stream)) m2go.ListenAndServe("tcp://127.0.0.1:9055|tcp://127.0.0.1:9056|d9eae9a0-6bad-11e1-9cc3-5254004a61b5", m) } func hello(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get(":name") io.WriteString(w, "Hello, "+name) } // this will serve as a Streaming API, continuing to push out updates // to connected client func stream(w http.ResponseWriter, r *http.Request) { // this line: is the key to make it streaming. r.Header.Set("Transfer-Encoding", "chunked") r.Header.Set("Content-Type", "application/json") io.WriteString(w, "some content") // lets simulate a zeromq type connection that recieves messages periocically // and pushes to client timer := time.NewTicker(time.Second * 1) go func() { for _ = range timer.C { io.WriteString(w, `{"msg":"still alive","status":200}`) } }() }